3

我正在处理使用空格作为千​​位分隔符的文本,例如 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']
4

1 回答 1

8

以下将做到这一点:

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

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

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

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

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

这要求除了第一个数字之外的每一组数字都恰好是三位数。

于 2012-05-28T14:17:57.327 回答