我想创建一个可以匹配以下模式的正则表达式:
5,000
2.5
25
这是我到目前为止的正则表达式:
re.compile('([\d,]+)')
我该如何调整.
?
最简单的方法就是这样:
re.compile('([\d,.]+)')
但这将允许像...
. 这可能是可以接受的,因为您的原始模式允许,,,
. 但是,如果您只想允许一个小数点,您可以这样做:
re.compile('([\d,]+.?\d*)')
请注意,这将不允许输入.5
- 您需要改为使用0.5
。
我认为完美的正则表达式是
re.compile(r'\d{1,2}[,.]\d{1,3}')
这样,您可以匹配一个或两个数字,后跟逗号或句号,然后是一到三个数字。
如果您以后不打算使用匹配的内容,则不需要括号。省略它们会加快这个过程。
这是一个非常大但功能强大的正则表达式,用于捕获任何有效数字:
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']