我需要从可能包含其他电话/传真号码和以 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)
