2015-04-23 39 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; 
}