【问题标题】:Regular expression to exclude particular pattern match排除特定模式匹配的正则表达式
【发布时间】:2014-04-24 12:12:10
【问题描述】:

我需要一个正则表达式来匹配电话号码但不是“[1398340387]”--[10digits] 模式

我有这个正则表达式来识别电话号码,但这也匹配我想转义的 [1398340387]。

1?\s*\W?\s*(\d{3})\s*\W?\s*(\d{3})\s*\W?\s*(\d{4})(\se?x?t?(\d*))?

上下文:

我有一个可能包含电话号码和 [1398340387]: unix 时间戳的字符串,如果找到,我需要突出显示所有电话号码。现在 Unix 时间戳也被识别为电话号码并突出显示,我需要避免这种情况。

示例字符串

[1398337818] * 对话开始 * 使用“yash”[1398337818] 山姆:电话号码:1-234-567-8901 1-234-567-8901 x1234 1-234-567-8901 分机 1234 1 (234) 567-8901 1.234.567.8901 1/234/567/8901 12345678901 [1398337818] 山姆:你好 [1398337905] 山姆:信用卡 1111-2222-3333-4444 [1398338242]

我应该添加什么来逃避后面的部分?

谢谢

【问题讨论】:

  • 你在什么情况下使用这个正则表达式?你能单独做那个检查吗?
  • 你能给我们看一个示例字符串吗?
  • @Mokchhya 你也想捕获EXT (ext1234) 吗?
  • @Tuga:他的正则表达式确实捕获了扩展名,所以我怀疑答案是肯定的。
  • 似乎您可以使用negative lookbehind 来忽略[] 中包含的数字。

标签: c# regex


【解决方案1】:

以下正则表达式将仅匹配示例中的电话:

\b1\s*[-/\.]?\(?\d{3}\)?\s*[-/\.]?\d{3}[-/\.]?\d{4}(\s+(x|ext)\d{4})?\b

Debuggex Demo

【讨论】:

  • 感谢为我完成了这项工作。