正则表达式:如何捕捉其中有空格的大数字?

Regex: How can I catch big numbers with spaces in them?

我正在尝试使用 Python 正则表达式从字符串中捕获所有数字。我所说的数字是指整数和浮点数(使用 ,.)。 我设法使用这个正则表达式完成了它:([0-9]+[\,|\.][0-9]+|[0-9]+)

但是我有一个问题,我需要它来匹配其中包含 space 的大数字。我的意思是 20 0005 000 000。这些数字可能非常大,有很多 space。我不知道有多少。但是数字之间总会有1space,不会再多了。例如:20 30 = 这将是 2 个不同的数字。

我想我需要某种递归模式(?R),但我不知道如何使用它。

有人可以帮忙吗? :)

import re
number='20 300  4 100   400  50'
res=re.findall(r'(\d*\s*)',number)
res=''.join(res).split('  ')
print(list(map(lambda x: int(x.replace(' ','')),res)))

-输出

[20300, 4100, 400, 50]

您可以使用类似

的模式
(?<!\d)(?<!\d[.,])\d{1,3}(?:\s\d{3})*(?:[,.]\d+)?

参见regex demo

详情

  • (?<!\d)(?<!\d[.,]) - 不允许在当前位置左侧紧接数字或数字加逗号或句点
  • \d{1,3} - 一位、两位或三位数字
  • (?:\s\d{3})* - 零个或多个空格和三个数字的序列
  • (?:[,.]\d+)? - ,. 的可选出现,然后是一个或多个数字。

Python中,可以使用re.findall:

import re
text = "5 000, 6 123 456,345 and 6 123 456.345... I mean 20 000 or 5 000 000. For example: 20    30"
print( re.findall(r'(?<!\d)(?<!\d[.,])\d{1,3}(?:\s\d{3})*(?:[,.]\d+)?', text) )
## => ['5 000', '6 123 456,345', '6 123 456.345', '20 000', '5 000 000', '20', '30']