2015-04-23 72 views
0

你能告訴我如何使用正則表達式找出下面那種字符串的$數量嗎?我不擅長的正則表達式:(預先感謝。

jone has done $15 per unit: "good luck" 

結果應該是= $ 15

回答

3

你可以用一個很簡單的正則表達式像

\$\d+ 
  • \$匹配$
  • \d+匹配一個或多個數字

Regex Demo

string str = "jone has done $15 per unit: \"good luck\""; 
Regex pattern = new Regex (@"\$\d+"); 
Match match = pattern.Match(str); 
Console.WriteLine(match.Groups[0]); 
=> $15 

EDIT

要包括小數以及

\$\d+(?:\.\d+)? 
  • \.匹配小數點
  • \d+匹配一個或多個數字
  • ?量詞,零個或一個presceding模式匹配。該量詞確保小數部分的可選匹配。

Regex Demo

string str = "jone has done $15.5 per unit: \"good luck\""; 
Regex pattern = new Regex (@"\$\d+(?:\.\d+)?"); 
Match match = pattern.Match(str); 
Console.WriteLine(match.Groups[0]); 
=> $15.5 
+0

你可以調整它爲小數嗎? – Sampath

+0

@Sampath我編輯了我的答案。希望它可以幫助你:) – nu11p01n73R

+0

是的。非常感謝我的朋友:) – Sampath

2

你可以試試這個正則表達式:

@"\$\d+(\.\d+)?\b" 

這將匹配一個$後跟一個數字,也將匹配十進制數。

+0

感謝您的支持:) – Sampath

-1

這個什麼:

/\$\d*/ 

對於多個結果:

/\$\d*/g 
0

下面是使用LINQ和decimal.TryParse與正確的文化和NumberStyles.Currency沒有正則表達式完全不同的方法:

string text = "jone has done $ per unit: \"good luck\""; 
var dollars = text.Split() 
    .Select(s => s.TryGetDecimal(usCI, NumberStyles.Currency)) 
    .Where(d => d.HasValue); 
Console.Write(string.Join(",", dollars)); // 15 

使用此擴展名嘗試將字符串解析爲decimal?

public static decimal? TryGetDecimal(this string item, IFormatProvider formatProvider = null, NumberStyles nStyles = NumberStyles.Any) 
{ 
    if (formatProvider == null) formatProvider = NumberFormatInfo.CurrentInfo; 
    decimal d = 0m; 
    bool success = decimal.TryParse(item, nStyles, formatProvider, out d); 
    if (success) 
     return d; 
    else 
     return null; 
}