从字符串python提取电话号码和传真号码

时间:2018-08-16 06:29:26

标签: regex python-3.x

我有一个如下字符串:

"""350 tel: (650) 725—9327 fax: (650) 723» 1882"""

我要提取电话号码,并且在python中以相同的方式传真。

到目前为止,这是我查找电话号码的方式:

re.findall(r'[\+\(]?[1-9][0-9 .\-\(\)]{8,}[0-9 ]', string)

我如何还能找到传真号码?

2 个答案:

答案 0 :(得分:2)

要获取给定示例的电话和传真,您可以在(?<=后使用肯定的外观来断言左侧是电话或传真部分。

(?<=(?:tel|fax): )\(\d{3}\)\s*\d{3}[—»]\s*\d{4}\b

说明

  • (?<=(?:tel|fax): )后向正向匹配以匹配电话或传真,后跟冒号和空格
  • \(\d{3}\)匹配左括号,3位数字和右括号
  • \s*匹配零个或多个空白字符
  • \d{3}匹配3位数字
  • [—»]使用字符类匹配指定字符之一
  • \s*匹配零个或多个空白字符
  • \d{4}\b匹配4位数字,后跟一个单词边界

除了[—»]\s*之外,您还可以使用\D+一次或多次不匹配数字。

例如:

import re
string = """350 tel: (650) 725—9327 fax: (650) 723» 1882"""
print(re.findall(r'(?<=(?:tel|fax): )\(\d{3}\)\s*\d{3}[—»]\s*\d{4}\b', string))

Demo

答案 1 :(得分:1)

如果电话的格式可变,则可以使用以下方法:

import re
string = """350 tel: (650) 725—9327 fax: (650) 723» 1882"""
phone_regex  = re.match(".*tel:(.*)fax:(.*)",string)
phone , fax = [ re.sub("[^0-9]","",x) for x in phone_regex.groups() ]