首页 > 解决方案 > 正则表达式提取所有具有不同长度和特殊字符的数字

问题描述

text1=""" my acc no is 1234 5678.I pay 123$ as an interest @ 14.9% starting from 12/07/19.My debit number is 123-45666-789-112"""

我希望输出具有所有数字,例如1234 5678, 123$, 14.9%, 12/07/19,123-45666-789-112

我试图运行的代码给出了部分结果。请帮帮我

import re

reg="\d{1,}[^a-zA-Z]?\d{1,}?[^a-zA-Z]?\d?"

gc=re.compile(reg)
number = gc.findall(text1)
print(number)
['1234 567', '123$', '14.9%', '12/07', '19.', '123-456', '66-789', '112']

另外,如果我想要数字前的两个单词,我该如何提取?即acc no是1234 5678等。

标签: pythonregexpython-3.x

解决方案


要获得完整结果,您可以使用以下正则表达式:

(?:\d+[ $%./-]?)+

它捕获可能由单个连续数字分隔符分隔的数字序列。这将捕获日期、带有单个空格的数字作为百位数分隔符和货币/百分比符号,但将避免匹配1. 2sentence 1. 2nd sentence留下使用多个空格分隔数字的可能性。

要包括前两个词,您可以使用这个:

[^\d ]+ [^\d ]+ (?:\d+[ $%./-]?)+

它只捕获两个由空格分隔的非数字字符序列,然后继续执行前一个正则表达式。

(注意,在帐号的情况下,它只会捕获“no is”)

在线尝试!


推荐阅读