使用正则表达式找出$ amount

时间:2015-04-23 07:08:07

标签: c# regex

你能告诉我如何使用正则表达式找出以下类型字符串的$ amount吗?我不擅长正则表达式:(提前致谢。

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

结果应为= $ 15

4 个答案:

答案 0 :(得分: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

修改

还包括小数

\$\d+(?:\.\d+)?
  • \.匹配小数点
  • \d+匹配一个或多个数字
  • ?量词,匹配零或一个前置模式。该量词确保了小数部分的可选匹配。

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

答案 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