我正在处理使用空格作为千位分隔符的文本,例如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']
答案 0 :(得分:8)
以下将会这样做:
regex = re.compile(r"(\d+(?:\s+\d+)*)")
这使用与一个或多个空格((?:)
)匹配的非捕获组\s+
,后跟至少一个数字(\d+
)。整个非捕获组可以出现零次或多次(*
)。
值得指出的是,对于Python正则表达式使用原始字符串(r""
或r''
)通常是个好主意。
最后,我可能会像这样收紧正则表达式:
regex = re.compile(r"(\d+(?:\s+\d{3})*)")
这要求除第一组以外的每组数字都是正好三位数。