re.findall查找带有破折号(-)和逗号(,)的数字

时间:2018-12-29 05:12:37

标签: python

我有值

x = '970.11 - 1,003.54'

例如,我尝试了多种类型的re.findall

re.findall('\+d',x)
['970', '11', '1', '003', '54']

尽管我希望它显示

['970.11', '1,003.54]

3 个答案:

答案 0 :(得分:2)

\d仅是数字。即使我们认为其他字符是数字的一部分,它也不会匹配。您需要使用类似的手动操作:

import re
x = '970.11 - 1,003.54'
re.findall('[\d\.,]+',x)  # match numbers .  or ,

结果:

['970.11', '1,003.54']

这是一个非常宽容的正则表达式-它会匹配很多可能不是数字的东西(例如..,,4)。如果您想要某种在一般情况下都可以使用的东西(例如.4511,000.222.等),则数字很难与正则表达式匹配。输入越一致,则越容易将会。有时,匹配非成员(例如您的-)会更容易。

答案 1 :(得分:1)

尝试一下,它也可以工作:

import re
re.findall('\d+\,?\d+\.*\d*',x)

输出:

['970.11', '1,003.54']

这里,是可选的,如果它介于所接受的数字之间,否则将不接受。 如果您希望.为可选,则可以这样设置:

In [48]: x
Out[48]: '970.11 - 1,003.54 2345'

In [49]: re.findall('\d+\,?\d+\.?\d+',x)
Out[49]: ['970.11', '1,003.54', '2345']

答案 2 :(得分:0)

为此,您可以使用示例对正则表达式进行分组

x = '970.11 - 1,003.54'
y = re.findall('([0-9.,]+)([ -]+)([0-9.,]+)',x)
print(y[0]) #prints ('970.11', ' - ', '1,003.54')
z = [y[0][0],y[0][2]]
print(z) #prints ['970.11', '1,003.54']

在这种情况下,正则表达式由3组组成:第一个和最后一个匹配0123456789.,的至少一个,中间至少-的一个(空格或破折号)