2011-06-03 103 views
2

我试图找到货币像“NTE $ 22,539,420.00”串净正则表达式货币

我试图用几个正则表达式,包括^\s*[\+-]?\s?\$?\s?(\d*\.?\d{2}?){1}$但他们都不工作。有没有人有任何建议或理由为什么上述不起作用。

感谢, 吉姆

+0

所以你想要前三个字符?这些字符串是否在不同的行上? – Lazarus 2011-06-03 15:51:23

+1

因为您的表情在行首不接受字母(例如NTE)。 – 2011-06-03 15:57:56

回答

3

您可以利用^匹配字符串的开始,你的字符串的开头不与任何空白开始。你也没有考虑','字符。

尝试此\ S * [+ - ]????\ S \ $ \ S(???(\ d {1,3},)+ \ d {2})

+0

您可能想要转义小数位或任何字符在该位置匹配。 – 2011-06-03 16:18:51

+0

对没有小数位的货币有何建议? – Jim 2011-06-03 17:45:07

+0

只需使用正确的语法使十进制可选。 – 2011-06-03 18:06:20

0

的正则表达式的第一部分匹配字符串的开头,接着是零个或多个空格,接着可能是一个符号,接下来可能是'$'...,然后是一些数字。你的弦乐中“NTE”部分没有任何住宿空间。另外,我没有看到您的货币格式逗号。

匹配浮点可能有点棘手。不要忘记诸如$ .02的可能性。

1

尝试这一个:

^[^ \ d] +(?:\ d {1,3} [,])+ \ d {2} $

6

莫非你只需要转储所有的格式(小数除外)就像这样?

string money = "NTE $22,539,420.00"; 
string scrubbed = Regex.Replace(money, @"[^0-9\.]", string.Empty); 

在这一点上,擦洗包含22539420.00

+0

这是一个很好的选择 – Jim 2011-06-03 17:20:38

0

只是偶然发现了这个古老的帖子...

使用\p{Sc}this post建议。