正则表达式拿起逗号和期间Python

时间:2013-07-26 21:25:42

标签: python regex

我想创建一个可以匹配以下模式的正则表达式:

5,000
2.5
25

这是我到目前为止的正则表达式:

re.compile('([\d,]+)')

如何调整.

3 个答案:

答案 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']