我的问题是从货币清单列表中提取数字。
我的测试数据会是这样的
$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的初学者,所以请您给出简短的解释。
答案 0 :(得分:5)
答案 1 :(得分:0)
如果最多只有一个非数字字符并且您知道该字符始终为大写字母,则应该能够定义像[A-Z] *这样的字符范围。星号告诉脚本在该范围内查找0或1个字符,并且在此之前没有任何字符,该字符可以在序列中的任何位置。
如果您只想在字符串的最开头查找非数字字符,请在范围之前添加“^”符号,如下所示:“^ [A-Z]”。这只会在字符串的开头查找大写字母;如果你不想在其他地方出现信件,你必须特别限制其他地方的范围。
你也可以要求这样的数字:“[0-9] +”。这将匹配该范围内的一个或多个字符,这可确保您使用数字获得SOMETHING。
总之,它看起来像这样(假设一封信可以在任何地方):
/ [A-Z] * [0-9] +。/ g(对于javascript)
希望有所帮助。