提取美元数字

2024-04-25 23:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的只是从美元数字中提取数字。你知道吗

输入格式

...
$1,289,868
$62,000
$421
...

所需输出

...
1289868
62000
421
...



我用来只提取数字和逗号的正则表达式是:

r'\d+(,\d+){0,}'

当然输出。。。你知道吗

...
1,289,868
62,000
421
...

我想做的是将输出转换为整数(int(...)),但显然这对逗号不起作用。我相信我能自己解决这个问题,但我现在时间很紧。你知道吗

我知道我可以简单地使用r'\d+',但这显然会将每个块分成不同的匹配项…


Tags: 格式时间数字整数int逗号
3条回答

您不能在一个匹配操作中匹配不连续的文本。您不能将正则表达式放入re.findall1,345,456来接收1345456。您需要首先匹配所需的字符串,然后在代码中对其进行后期处理。你知道吗

一个正则表达式,可以用来提取数字本身

re.findall(r'\$(\d{1,3}(?:,\d{3})*)', s)

this regex demo。你知道吗

或者,您可以使用更通用的正则表达式来与re.findall一起使用:

r'\$(\d+(?:,\d+)*)'

this regex demo。你知道吗

请注意,re.findall将只返回字符串的捕获部分(与regex中的(...)部分匹配的部分)。你知道吗

细节

  • \$-美元符号
  • (\d{1,3}(?:,\d{3})*)-捕获组1:
    • \d{1,3}-1到3个数字(如果使用\d+,则为1个或更多数字)
    • (?:,\d{3})*-0个或更多的
      • ,-逗号
      • \d{3}-3位(如果使用\d+,则为1位或更多位)。你知道吗

Python code sample(去掉逗号):

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']

使用re.sub

例如:

import re
s = """$1,289,868
$62,000
$421"""

print([int(i) for i in re.sub(r'[^0-9\s]', "", s).splitlines()])

输出:

[1289868, 62000, 421]

你不需要正则表达式。你知道吗

int(''.join(filter(str.isdigit, "$1,000,000")))

很好用。你知道吗

如果出于某种原因确实要使用regex:

int(''.join(re.findall(r"\d", "$1,000,000")))

相关问题 更多 >

    热门问题