你能告诉我如何使用正则表达式找出以下类型字符串的$ amount吗?我不擅长正则表达式:(提前致谢。
jone has done $15 per unit: "good luck"
结果应为= $ 15
答案 0 :(得分:3)
您可以使用非常简单的正则表达式
\$\d+
\$
匹配$
\d+
匹配一个或多个数字示例强>
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
修改强>
还包括小数
\$\d+(?:\.\d+)?
\.
匹配小数点\d+
匹配一个或多个数字?
量词,匹配零或一个前置模式。该量词确保了小数部分的可选匹配。示例强>
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
答案 1 :(得分:2)
你可以试试这个正则表达式:
@"\$\d+(\.\d+)?\b"
这将匹配文字$
,后跟一个与十进制数匹配的数字。
答案 2 :(得分: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;
}
答案 3 :(得分:-1)
这个怎么样:
/\$\d*/
对于多个结果:
/\$\d*/g