.net正则表达式返回2结果我只想要1

时间:2015-11-05 19:37:46

标签: .net regex

尝试从混合字符值中提取美国电话号码(任何格式),仅使用.NET正则表达式返回ONE或ZERO结果。

  

示例: yyy666 555 5555yyyy1

模式(?<!\d)\(?([\d]{3})*\)?[\s-]?[\d]{3}[\s-]?[\d]{4}(?!\d)正在返回:

  

“666 555 5555”,“666”。

我不希望第二个结果“666”(仅包含区号),应该只有一个结果或ZERO结果(IE。该示例的回报应该只是一个完整的电话号码“666 555 5555 “或者没什么。”

我缺少什么/如何让它返回0或1个结果?

1 个答案:

答案 0 :(得分:2)

部分([\d]{3})*\)会导致群组捕获,而这是你的&#34; 666&#34;。

您可以通过以下方式避免这种情况:

(?<!\d)\(?(?:[\d]{3})*\)?[\s-]?[\d]{3}[\s-]?[\d]{4}(?!\d)

其中(?:...)表示非捕获组,或者使用正则表达式的显式捕获标记:

new Regex("...", RegexOptions.ExplicitCapture);