Python 使用正则表达式获取带句点的电话号码
我有一个电话号码列表,我希望在字符串Python 使用正则表达式获取带句点的电话号码,python,regex,Python,Regex,我有一个电话号码列表,我希望在字符串s中显示所有变体。从那时起,我尝试了以下方法 import re s = ' 1.210.223.1112 (113)-945-6373; 222.212.2333 (111)123-4567 (111)1234567 (111 )123-4567 \n(1-100-533-1710)the ( 111)123-4567 Z1902022 (111)123-4567 N18-2181 Z1234567 1-22-2001 (100) 115-5198 f:
s
中显示所有变体。从那时起,我尝试了以下方法
import re
s = ' 1.210.223.1112 (113)-945-6373; 222.212.2333 (111)123-4567 (111)1234567 (111 )123-4567 \n(1-100-533-1710)the ( 111)123-4567 Z1902022 (111)123-4567 N18-2181 Z1234567 1-22-2001 (100) 115-5198 f: (110)-111-1111 112.222.1112 (222)-222-3337 (120) 305-1314'
这让我接近我想要的
reg = r'\(?\s*\d?\s*-?\d{3}\s*[)-]?-?\s*\d{3}\s*-?\s*\d{4}\)?'
r1 = re.findall(reg,s)
r1
但是,它缺少1.210.223.1112
和222.212.2333
我尝试通过添加一个
来修改reg
,但这并没有给出我想要的
['(113)-945-6373',
'(111)123-4567',
'(111)1234567',
'(111 )123-4567',
'(1-100-533-1710)',
'( 111)123-4567',
'(111)123-4567',
'(100) 115-5198',
'(110)-111-1111',
'(222)-222-3337',
'(120) 305-1314']
我想要的输出如下,包括1.210.223.1112
和222.212.2333
reg = r'\(?\s.*\d?\s*-?\d{3}\s*[)-]?-?\s*\d{3}\s*-?\s*\d{4}\)?'
如何更改
reg
以获得所需的输出?您很接近,只需在查找-
时添加一个可选的点匹配?,以及在编号前添加一个空格(空格和空格)时分开大小写:
['1.210.223.1112',
'(113)-945-6373',
'222.212.2333',
'(111)123-4567',
'(111)1234567',
'(111 )123-4567',
'(1-100-533-1710)',
'( 111)123-4567',
'(111)123-4567',
'(100) 115-5198',
'(110)-111-1111',
'(222)-222-3337',
'(120) 305-1314']
等效,但使用或|
和非匹配组:
(?:(?:\(\s)|\(?\d?)-?\.?\d{3}\s*[)-]?-?\.?\s*\d{3}\s*-?\.?\s*\d{4}\)?
输出:
(?:(?:\(\s)|\(?\d?)(?:-|\.)?\d{3}\s*[)-]?(?:-|\.)?\s*\d{3}\s*(?:-|\.)?\s*\d{4}\)?
@请注意,此答案将数字前面的空格与点匹配,例如“222.212.2333”和“112.222.1112”。
['1.210.223.1112',
'(113)-945-6373',
'222.212.2333',
'(111)123-4567',
'(111)1234567',
'(111 )123-4567',
'1-100-533-1710',
'( 111)123-4567',
'(111)123-4567',
'(100) 115-5198',
'(110)-111-1111',
'112.222.1112',
'(222)-222-3337',
'(120) 305-1314']
re.findall(r'(?:\b\d[.-])?\(?\s?\d{3}[.) -]{0,2}\d{3}[ .-]?\d{4}',s)
Out[31]:
['1.210.223.1112',
'(113)-945-6373',
' 222.212.2333',
'(111)123-4567',
'(111)1234567',
'(111 )123-4567',
'1-100-533-1710',
'( 111)123-4567',
'(111)123-4567',
'(100) 115-5198',
'(110)-111-1111',
' 112.222.1112',
'(222)-222-3337',
'(120) 305-1314']