如何使用Python用空格分隔符标识字符串中的数字?

如何使用Python用空格分隔符标识字符串中的数字?,python,regex,Python,Regex,我正在处理使用空格作为数千分隔符的文本,例如400或40000或400000或400000。我需要识别字符串中的数字。一旦确定,有许多选项可以重新设置号码的格式。我是regex的新手。这不起作用: import re line = '40) He had 120 hours to increase from 40 000 units to 20 000 000.' regex = re.compile("(\d+ *\d+)") re.findall(regex, line) ['40', '1

我正在处理使用空格作为数千分隔符的文本,例如400或40000或400000或400000。我需要识别字符串中的数字。一旦确定,有许多选项可以重新设置号码的格式。我是regex的新手。这不起作用:

import re
line = '40) He had 120 hours to increase from 40 000 units to 20 000 000.'
regex = re.compile("(\d+ *\d+)")
re.findall(regex, line)
['40', '120', '40 000', '20 000', '000']

以下几点可以做到:

regex = re.compile(r"(\d+(?:\s+\d+)*)")
这使用一个非捕获组
(?:)
,该组匹配一个或多个空格(
\s+
),后跟至少一个数字(
\d+
)。整个非捕获组可以出现零次或多次(
*

值得指出的是,在Python正则表达式中使用原始字符串(
r”“
r”“
)通常是一个好主意

最后,我可能会像这样收紧正则表达式:

regex = re.compile(r"(\d+(?:\s+\d{3})*)")

这要求除第一组数字外,每组数字的长度必须正好为三位数。

谢谢。为了更紧凑一点,我更新了它,将第一组限制在1-3位:re.compile((\d{1,3}(?:\s*\d{3})*))