Skip to main content
 首页 » 编程设计

python之正则表达式提取所有具有不同长度和特殊字符的数字

2024年09月07日28java哥

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

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

请您参考如下方法:

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

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

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

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

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

在继续前面的正则表达式之前,它只捕获两个由空格分隔的非数字字符序列。

(注意,在帐号的情况下,只会捕获“不是”)

Try it online !