2

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

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

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

有人可以帮忙吗?:)

4

2 回答 2

1

您可以使用类似的模式

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

请参阅正则表达式演示

细节

  • (?<!\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']
于 2021-04-24T17:34:10.870 回答
0
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]

于 2021-04-24T17:30:41.317 回答