我有一个网页垃圾,刮价格,因为我需要它找到以下价格串:
762,50个
1.843,75英镑
在我第一次天真的实现中,我没有接受。考虑到并将第一个数字与此正则表达式完美匹配:
re.findall("\d+,\d+", string)[0]
现在我需要把这两种情况都匹配起来,我最初的想法是:
re.findall("(\d+.\d+,\d+|\d+,\d+)", string)[0]
有了这样一个想法,使用or运算符,可以找到第一个或第二个不起作用的,有什么建议吗?
最佳答案
无需使用或,只需将第一部分添加为可选参数:
(?:\d+\.)?\d+,\d+
?
之后的(?:\d+\.)
使其成为可选参数。那个'?:'表示不捕获此组,只匹配它。
>>> re.findall(r'(?:\d+\.)?\d+,\d+', '1.843,75 762,50')
['1.843,75', '762,50']
还要注意,您必须转义与除换行符以外的任何字符匹配的
.
(点)(请参见http://docs.python.org/2/library/re.html#regular-expression-syntax)关于python - 正则表达式价格匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22018175/