从美元数字中提取仅数字

Pri*_*Nom 0 python regex

我想要做的只是从美元数字中提取数字.

输入格式

...
$1,289,868
$62,000
$421
...
Run Code Online (Sandbox Code Playgroud)

期望的输出

...
1289868
62000
421
...
Run Code Online (Sandbox Code Playgroud)



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

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

哪个当然输出......

...
1,289,868
62,000
421
...
Run Code Online (Sandbox Code Playgroud)

我想要做的是将输出转换为整数(int(...)),但显然这不适用于逗号.我相信我可以自己解决这个问题,但我现在的运行时间非常短.

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

Wik*_*żew 6

您无法在一次匹配操作中匹配不连续的文本.你不能把正则表达式re.findall反对1,345,456接收1345456.您需要首先匹配所需的字符串,然后在代码中对它们进行后处理.

您可以使用正则表达式自己提取数字

re.findall(r'\$(\d{1,3}(?:,\d{3})*)', s)
Run Code Online (Sandbox Code Playgroud)

看到这个正则表达式演示.

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

r'\$(\d+(?:,\d+)*)'
Run Code Online (Sandbox Code Playgroud)

看到这个正则表达式演示.

请注意,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']
Run Code Online (Sandbox Code Playgroud)