regex 正则表达式提取复杂文本中的电话号码

b5lpy0ml  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(88)

我花了很多时间写了一个正则表达式来匹配以下字符串:

tel/mob: 001 433 123 4352
tel/mob: 0014331234352
tel: 001 433 123 4352
tel: 0014331234352
tel/mob: 001 (433) 123 4352
tel: 001 (433) 123 4352
tel/mob: +1 433 123 4352
tel/mob: +14331234352
tel: +1 433 123 4352
tel: +14331234352
tel/mob: +1 (433) 123 4352
tel: +1 (433) 123 4352

我所做的是:

print (re.findall(r':\s(\w+)' , article))

但它不能正常工作,我需要提取数字。

vktxenjb

vktxenjb1#

那么把:后面的所有东西,也就是数字、空格、加号或括号呢?

import re

data = """tel/mob: 001 433 123 4352
tel/mob: 0014331234352
tel: 001 433 123 4352
tel: 0014331234352
tel/mob: 001 (433) 123 4352
tel: 001 (433) 123 4352
tel/mob: +1 433 123 4352
tel/mob: +14331234352
tel: +1 433 123 4352
tel: +14331234352
tel/mob: +1 (433) 123 4352
tel: +1 (433) 123 4352"""

for line in data.splitlines():
    m = re.search(r':([0-9() +]+)', line)
    print ''.join(c for c in m.groups()[0] if c.isdigit())

输出:

0014331234352
0014331234352
0014331234352
0014331234352
0014331234352
0014331234352
14331234352
14331234352
14331234352
14331234352
14331234352
14331234352

https://regex101.com/r/QYSlJj/1

bybem2ql

bybem2ql2#

我允许在开始处使用可选的+号,以及重复的数字组和可选的括号。适用于提供的示例。

r':\s\+?(\(?[0-9]+\)?\s?)+'

https://regex101.com/r/ugQU0D/1

相关问题