正则表达式:如何捕捉其中有空格的大数字?
Regex: How can I catch big numbers with spaces in them?
我正在尝试使用 Python 正则表达式从字符串中捕获所有数字。我所说的数字是指整数和浮点数(使用 ,
或 .
)。
我设法使用这个正则表达式完成了它:([0-9]+[\,|\.][0-9]+|[0-9]+)
但是我有一个问题,我需要它来匹配其中包含 space 的大数字。我的意思是 20 000
或 5 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']
我正在尝试使用 Python 正则表达式从字符串中捕获所有数字。我所说的数字是指整数和浮点数(使用 ,
或 .
)。
我设法使用这个正则表达式完成了它:([0-9]+[\,|\.][0-9]+|[0-9]+)
但是我有一个问题,我需要它来匹配其中包含 space 的大数字。我的意思是 20 000
或 5 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']