我有值
x = '970.11 - 1,003.54'
例如,我尝试了多种类型的re.findall
re.findall('\+d',x)
['970', '11', '1', '003', '54']
尽管我希望它显示
['970.11', '1,003.54]
答案 0 :(得分:2)
\d
仅是数字。即使我们认为其他字符是数字的一部分,它也不会匹配。您需要使用类似的手动操作:
import re
x = '970.11 - 1,003.54'
re.findall('[\d\.,]+',x) # match numbers . or ,
结果:
['970.11', '1,003.54']
这是一个非常宽容的正则表达式-它会匹配很多可能不是数字的东西(例如..,,4
)。如果您想要某种在一般情况下都可以使用的东西(例如.45
,11,000.2
,22.
等),则数字很难与正则表达式匹配。输入越一致,则越容易将会。有时,匹配非成员(例如您的-
)会更容易。
答案 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.,
的至少一个,中间至少-
的一个(空格或破折号)