3

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

5,000
2.5
25

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

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

我该如何调整.

4

3 回答 3

4

最简单的方法就是这样:

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

但这将允许像.... 这可能是可以接受的,因为您的原始模式允许,,,. 但是,如果您只想允许一个小数点,您可以这样做:

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

请注意,这将不允许输入.5- 您需要改为使用0.5

于 2013-07-26T21:28:40.737 回答
2

我认为完美的正则表达式是

re.compile(r'\d{1,2}[,.]\d{1,3}')

这样,您可以匹配一个或两个数字,后跟逗号或句号,然后是一到三个数字。

如果您以后不打算使用匹配的内容,则不需要括号。省略它们会加快这个过程。

于 2013-07-26T23:00:06.170 回答
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']
于 2013-07-27T00:53:34.223 回答