我需要提取电话号码,但我的正则表达式不会提取所有电话号码

text = '+79082343434   8(912)2342554,  +7 982 342 sdfdsf 34 34 fsf 8-923-132-34-23 +7 982 342 34 34! sdfsd'
r = re.compile(r"\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d")
phone = r.findall(text)

Out[7]: ['+79082343434', '8(912)2342554']


需求输出:

['+79082343434', '8(912)2342554', '8-923-132-34-23', '+7 982 342 34 34']


如何改进此表达式以获取所有电话号码?

最佳答案

这将为您提供所需的输出:

text = '+79082343434   8(912)2342554,  +7 982 342 sdfdsf 34 34 fsf 8-923-132-34-23 +7 982 342 34 34! sdfsd'
regex = re.compile("\+?\d[\( -]?\d{3}[\) -]?\d{3}[ -]?\d{2}[ -]?\d{2}")
numbers = re.findall(regex, text)


但是您可能需要稍微调整一下表达式,具体取决于您要考虑的电话号码。

10-07 13:29