首页 > 解决方案 > 使用正则表达式修改选择电话号码的变体

问题描述

import re
s =  'nums here (111)123-4567 or (1-800-111-2222)(123)1234567 or 321-123-4567 or ( 112)123-4567 or (113 )123-4567'

我的目标是从中获取所有电话号码s

通过使用正则表达式选择电话号码的变体,我尝试以下操作:

reg = r'\d{3}-\d{3}-\d{4}|\(\s*\d{3}\s*\)\d{7}|\(\s*\d{3}\s*\)\s*\d{3}-\d{4}' 
r1 = re.findall(reg,s)
r1

这让我接近我想要的

['(111)123-4567',
 '800-111-2222',
 '(123)1234567',
 '321-123-4567',
 '( 112)123-4567',
 '(113 )123-4567']

但是,我想(1-800-111-2222)代替部分800-111-2222

我想要的输出如下

 ['(111)123-4567',
     '(1-800-111-2222)',
     '(123)1234567',
     '321-123-4567',
     '( 112)123-4567',
     '(113 )123-4567']

我该如何改变

reg = r'\d{3}-\d{3}-\d{4}|\(\s*\d{3}\s*\)\d{7}|\(\s*\d{3}\s*\)\s*\d{3}-\d{4}'

得到我想要的输出?

标签: regexpython-3.xstringtext

解决方案


import re
s =  'nums here (111)123-4567 or (1-800-111-2222)(123)1234567 or 321-123-4567 or ( 112)123-4567 or (113 )123-4567'

reg="\(\d{3}\)\d{3}-\d{4}|\(\d{1}-\d{3}-\d{3}-\d{4}\)|\(\d{3}\)\d{7}|\d{3}-\d{3}-\d{4}|\(\s+\d{3}\)\d{3}-\d{4}|\(\d{3}\s+\)\d{3}-\d{4}"

r1 = re.findall(reg,s)
r1


在上面运行,输出:

['(111)123-4567',
 '(1-800-111-2222)',
 '(123)1234567',
 '321-123-4567',
 '( 112)123-4567',
 '(113 )123-4567']

推荐阅读