正则表达式匹配数字有轻微问题

时间:2011-10-19 06:09:36

标签: regex numbers

我的问题是从货币清单列表中提取数字。

我的测试数据会是这样的

$100.00
AUD 2012.00
Rs. 234.0 ASD
133 USD
Another thing 1233S.E122
Blah Blah 1.23 
SG$ 013.3
23.03 Something
Something T1233S.122S Else
Whatever 2

我想出的正则表达式是

(\d+)\.?(\d+)?

基本上,一个数字后跟一个可选的点和另一个可选的数字。

所以while this works fine,它比我想要的更有效。例如,它匹配

1233S.E122中的1233和122以及T1233S.122S

的相同内容

我理解,因为我使用全局标记运行它,所有数字都匹配。

如何使它与开头,中间或结尾包含非数字的那些不匹配?

因为我是RegEx的初学者,所以请您给出简短的解释。

2 个答案:

答案 0 :(得分:5)

使用一些单词边界......

\b\d+(?:\.\d+)?\b

这将匹配带有字边界的可选小数位数字。

RegExr

我还整理了你的正则表达式,假设你想要匹配整数而不是单独的小数。

答案 1 :(得分:0)

如果最多只有一个非数字字符并且您知道该字符始终为大写字母,则应该能够定义像[A-Z] *这样的字符范围。星号告诉脚本在该范围内查找0或1个字符,并且在此之前没有任何字符,该字符可以在序列中的任何位置。

如果您只想在字符串的最开头查找非数字字符,请在范围之前添加“^”符号,如下所示:“^ [A-Z]”。这只会在字符串的开头查找大写字母;如果你不想在其他地方出现信件,你必须特别限制其他地方的范围。

你也可以要求这样的数字:“[0-9] +”。这将匹配该范围内的一个或多个字符,这可确保您使用数字获得SOMETHING。

总之,它看起来像这样(假设一封信可以在任何地方):

/ [A-Z] * [0-9] +。/ g(对于javascript)

希望有所帮助。