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

Python re.findall查找带破折号(-)和逗号(,)的数字,python,Python,我有价值 x = '970.11 - 1,003.54' 例如,我试过很多类型的re.findall re.findall('\+d',x) ['970', '11', '1', '003', '54'] 虽然我想让它表现出来 ['970.11', '1,003.54] \d仅为数字。它不会匹配其他字符,即使我们认为它们是数字的一部分。您需要手动执行以下操作: import re x = '970.11 - 1,003.54' re.findall('[\d\.,]+',x) # mat

我有价值

x = '970.11 - 1,003.54'
例如,我试过很多类型的re.findall

re.findall('\+d',x)
['970', '11', '1', '003', '54']
虽然我想让它表现出来

['970.11', '1,003.54]

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

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

['970.11', '1,003.54']

这是一个非常宽容的正则表达式-它将匹配许多可能不是数字的东西(如
,,4
)。如果您想要在一般情况下(如
.45
11000.2
22.
)等)工作,则数字可能很难与正则表达式匹配。您的输入越一致,就越容易匹配。有时更容易匹配非成员(如您的
-
)。

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

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

['970.11', '1,003.54']

这是一个非常宽容的正则表达式-它将匹配许多可能不是数字的东西(如
,,4
)。如果您想要在一般情况下(如
.45
11000.2
22.
)等)工作,则数字可能很难与正则表达式匹配。您的输入越一致,就越容易匹配。有时更容易匹配非成员(如您的
-
)。

试试这个,它也可以:

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

试试这个,它也可以:

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

为了实现这一点,您可以使用正则表达式分组,使用您的示例

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.,
中的一个,中间至少匹配
-
(空格或破折号)

要获得此结果,可以使用正则表达式分组,以您的示例为例

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.,
中的一个,中间至少匹配
-
(空格或破折号)

这将有助于
'970.11-1003.54'。拆分('-')?