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

tah*_*oar 3 python regex

我正在处理使用空格作为千​​位分隔符的文本,例如400或40 000或40 000 000或4 000 000 000.我需要识别字符串中的数字.一旦确定,有许多选项可以重新格式化数字.我是正则表达式的新秀.这不起作用:

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']
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 8

以下将这样做:

regex = re.compile(r"(\d+(?:\s+\d+)*)")
Run Code Online (Sandbox Code Playgroud)

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

值得指出的是,将原始字符串(r""或r'')用于Python正则表达式通常是个好主意.

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

regex = re.compile(r"(\d+(?:\s+\d{3})*)")
Run Code Online (Sandbox Code Playgroud)

这要求除第一组之外的每组数字正好是三位数.