我想创建一个可以匹配以下模式的正则表达式:
5,000
2.5
25
这是我到目前为止的正则表达式:
re.compile('([\d,]+)')
如何调整.
?
答案 0 :(得分:3)
最简单的方法就是:
re.compile('([\d,.]+)')
但是这会允许像...
这样的输入。这可能是可以接受的,因为您的原始模式允许,,,
。但是,如果您只想允许一个小数点,则可以执行此操作:
re.compile('([\d,]+.?\d*)')
请注意,这不允许.5
之类的输入 - 您需要使用0.5
代替。
答案 1 :(得分:2)
我认为完美的正则表达式将是
re.compile(r'\d{1,2}[,.]\d{1,3}')
这样你可以匹配一个或两个数字,后跟一个逗号或一个句号,然后是一到三个数字。
如果您以后不打算使用匹配的内容,则不需要括号。省略它们可以加速这个过程。
答案 2 :(得分:1)
这是一个非常强大但强大的正则表达式,用于捕获任何有效数字:
import re
string = """
5,000
2.5
25
234,456,678.345
...
,,,
23,332.1
abc
45,2
0.5
"""
print re.findall("(?:\d+(?:,?\d{3})*)+\.?(?:\d+)?", string)
输出:
# Note that it will not capture "45,2" because it is invalid
# It instead does "45" and "2", which are each valid
['5,000', '2.5', '25', '234,456,678.345', '23,332.1', '45', '2', '0.5']