我有一个网页垃圾,刮价格,因为我需要它找到以下价格串:
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/

10-15 11:35