Skip to main content
 首页 » 编程设计

python之用于从数据中过滤分机号码(电话)的正则表达式帮助

2024年11月24日32sky-heaven

我需要从可能包含其他电话/传真号码和以 E 或 X 结尾的名称的字符串中找到仅匹配分机号码的正则表达式模式。需要帮助分解正则表达式模式或提示来执行此操作更有效。

我尝试使用正则表达式模式,并且只有在存在其他电话/传真号码时才能匹配分机号码。

(?i)\s*([Ext]*?[- .]*\d{1,4})([X]*?[- .]*\d{1,4})([Ex]*?[- .]*\d{1,4}) 

根据我现在拥有的模式,我可以匹配 Ext. 这样的数字。 115、X 256、Ex 2114 仅当没有其他数字存在时。但是,如果有电话号码,我会先匹配它。
此外,当从字符串 "Jane Doe 888-888-8888/Fx 888-8888 指示传真时,x 888-8888 不匹配。
输入字符串:

 1. "Jane  EXT. 115"   
 2. "Jane X289 FAX 888-888-8888"   
 3. "John Doe-X 241 OR CELL888/8888888" 
 4. "Jane Doe 888-888-8888" 
 5. "John Doe FX 888-888-8888" 

输出是:

 1. "EXT. 115"  
 2. "X289" 
 3. "X 241" 
 4. "e 888-888-8888" 
 5. "X 888-888-8888" 

(当没有扩展存在时)

请您参考如下方法:

这似乎适用于您的样本

(?i)\s*((?:Ext|Ex|X(?<!FAX))[- .]*\d{1,4}(?![-\d]))

https://regex101.com/r/UqJKeE/1

展开

 (?i) 
 \s*  
 (                             # (1 start) 
      (?: 
           Ext 
        |  Ex 
        |  X 
           (?<! FAX ) 
      ) 
      [- .]* \d{1,4}  
      (?! [-\d] ) 
 )                             # (1 end)