我下面舉個例子串從C#中較長的字符串解析此數字的最佳方法是什麼?
"CTS3010 - 6ppl"
或
"CTs3200 - 14ppl"
或
"CTS-500 2ppl"
,我需要分析出這些弦數。解析字符串末尾的「ppl」之前的數字的最佳方法是什麼?我需要正則表達式嗎?我有邏輯向後循環,但感覺就像這裏有一個更優雅的解決方案。
這些只是例子,但所有的例子似乎遵循相同的模式是
- 一堆文字
- 一些
- PPL後綴
我下面舉個例子串從C#中較長的字符串解析此數字的最佳方法是什麼?
"CTS3010 - 6ppl"
或
"CTs3200 - 14ppl"
或
"CTS-500 2ppl"
,我需要分析出這些弦數。解析字符串末尾的「ppl」之前的數字的最佳方法是什麼?我需要正則表達式嗎?我有邏輯向後循環,但感覺就像這裏有一個更優雅的解決方案。
這些只是例子,但所有的例子似乎遵循相同的模式是
你可以做到這一點搶「ppl」之前的數字:
using System.Text.RegularExpressions;
...
Regex regex = new Regex("([0-9]+)ppl");
string matchedValue = regex.Match("CTS-500 122ppl").Groups[1].Value;
在這種情況下matchedValue
將是122
如果你想成爲安全,而你知道「脂肪酶」永遠是字符串的結尾,我會改變的正則表達式:"([0-9]+)ppl$"
(唯一的區別是最後的美元符號)。
'[0-9]'和'\ d'有什麼區別嗎?我看到很多人使用'[0-9]'而不是'\ d'這幾天... – 2013-03-02 04:42:41
根據:http://stackoverflow.com/questions/273141/regex-for-numbers-only \ d將也匹配非西方數字字符。 – 2013-03-02 04:46:31
下面是使用LINQ的一種方式:
const String ppl = "ppl";
var examples = new[] { "CTS3010 - 6ppl", "CTs3200 - 14ppl", "CTS-500 2ppl" };
var delimiters = new[] { " " };
var result = examples
.Select(e => e.Split(delimiters, StringSplitOptions.RemoveEmptyEntries))
.Select(t => t.Last().ToLowerInvariant().Replace(ppl, String.Empty))
.Select(Int32.Parse)
.ToList();
需要注意的是,如果它不能解析整數值,這將失敗。如果無法保證每個字符串都以NNppl
結尾,則需要先檢查它是否爲數字值。
我不知道有關「最佳途徑」,但一個方法,這是非常容易理解和修改是一個字符串對象擴展方法:
public static int Parse(this string phrase)
{
if (string.IsNullOrWhiteSpace(phrase)) { throw new NullReferenceException("phrase is null");}
string num = string.Empty;
foreach (char c in phrase.Trim().ToCharArray()) {
if (char.IsWhiteSpace(c)) { break; }
if (char.IsDigit(c)) { num += c.ToString(); }
}
return int.Parse(num);
}
假設「」是的休息狀態。如果有可能你沒有得到一個數字和/或可能是一個System.Text.StringBuilder,你可能更喜歡int.TryParse。
這3種格式都是唯一的格式嗎? – 2013-03-02 04:22:40
是你之間的數字 - 和ppl eg:-NUMBER ppl – saeed 2013-03-02 04:23:04
我更新了問題,以便更明確 – leora 2013-03-02 04:25:35