2013-03-02 52 views
2

我下面舉個例子串從C#中較長的字符串解析此數字的最佳方法是什麼?

"CTS3010 - 6ppl" 

"CTs3200 - 14ppl" 

"CTS-500 2ppl" 

,我需要分析出這些弦數。解析字符串末尾的「ppl」之前的數字的最佳方法是什麼?我需要正則表達式嗎?我有邏輯向後循環,但感覺就像這裏有一個更優雅的解決方案。

這些只是例子,但所有的例子似乎遵循相同的模式是

  • 一堆文字
  • 一些
  • PPL後綴
+0

這3種格式都是唯一的格式嗎? – 2013-03-02 04:22:40

+0

是你之間的數字 - 和ppl eg:-NUMBER ppl – saeed 2013-03-02 04:23:04

+0

我更新了問題,以便更明確 – leora 2013-03-02 04:25:35

回答

6

你可以做到這一點搶「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

'[0-9]'和'\ d'有什麼區別嗎?我看到很多人使用'[0-9]'而不是'\ d'這幾天... – 2013-03-02 04:42:41

+0

根據:http://stackoverflow.com/questions/273141/regex-for-numbers-only \ d將也匹配非西方數字字符。 – 2013-03-02 04:46:31

1

下面是使用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結尾,則需要先檢查它是否爲數字值。

0

我不知道有關「最佳途徑」,但一個方法,這是非常容易理解和修改是一個字符串對象擴展方法:

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。

相關問題