作者:大东o世界 | 来源:互联网 | 2022-12-09 21:53
我想要做的只是从美元数字中提取数字.
输入格式
...
$1,289,868
$62,000
$421
...
期望的输出
...
1289868
62000
421
...
我用来提取数字和逗号的正则表达式是:
r'\d+(,\d+){0,}'
哪个当然输出......
...
1,289,868
62,000
421
...
我想要做的是将输出转换为整数(int(...)
),但显然这不适用于逗号.我相信我可以自己解决这个问题,但我现在的运行时间非常短.
我知道我可以简单地使用r'\d+'
,但这显然将每个块分成单独的匹配...
1> Wiktor Strib..:
您无法在一次匹配操作中匹配不连续的文本.你不能把正则表达式re.findall
反对1,345,456
接收1345456
.您需要首先匹配所需的字符串,然后在代码中对它们进行后处理.
您可以使用正则表达式自己提取数字
re.findall(r'\$(\d{1,3}(?:,\d{3})*)', s)
看到这个正则表达式演示.
或者,您可以使用更通用的正则表达式来使用re.findall
:
r'\$(\d+(?:,\d+)*)'
看到这个正则表达式演示.
请注意,re.findall
只返回捕获的字符串(...)
部分(与正则表达式中的部分匹配的部分).
细节
\$
- 一个美元符号
(\d{1,3}(?:,\d{3})*)
- 捕获第1组:
\d{1,3}
- 1到3位数(如果\d+
使用,1位或更多位)
(?:,\d{3})*
- 0或更多序列
,
- 逗号
\d{3}
- 3位数(如果\d+
使用,1位或更多位).
Python代码示例(删除逗号):
import re
s = """$1,289,868
$62,000
$421"""
result = [x.replace(",", "") for x in re.findall(r'\$(\d{1,3}(?:,\d{3})*)', s)]
print(result) # => ['1289868', '62000', '421']