使用regex获取带句点的电话号码

2024-06-26 13:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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' 

我有一个电话号码列表,我想得到字符串s中的所有变体。从modification of selecting variations of phone numbers using regex开始,我尝试了以下方法

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

这让我接近我想要的

['(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.1112222.212.2333。你知道吗

我尝试过通过添加一个.来修改reg,但这并没有给出我想要的

reg = r'\(?\s.*\d?\s*-?\d{3}\s*[)-]?-?\s*\d{3}\s*-?\s*\d{4}\)?'

我想要的输出如下,包括1.210.223.1112222.212.2333

['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']

如何更改reg以获得所需的输出?你知道吗


Tags: ofthe字符串importre列表电话号码变体
2条回答

你很接近,只要在寻找-时添加一个可选的点匹配\.?,以及在数字前面有( whitespace和一个空格时分开大小写:

(?:(?:\(\s)|\(?\d?)-?\.?\d{3}\s*[)-]?-?\.?\s*\d{3}\s*-?\.?\s*\d{4}\)?

Regex Demo

等效,但使用或|和非匹配组:

(?:(?:\(\s)|\(?\d?)(?:-|\.)?\d{3}\s*[)-]?(?:-|\.)?\s*\d{3}\s*(?:-|\.)?\s*\d{4}\)?

Regex Demo

输出:

['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']

相关问题 更多 >