尝试从混合字符值中提取美国电话号码(任何格式),仅使用.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个结果?
答案 0 :(得分:2)
部分([\d]{3})*\)
会导致群组捕获,而这是你的&#34; 666&#34;。
您可以通过以下方式避免这种情况:
(?<!\d)\(?(?:[\d]{3})*\)?[\s-]?[\d]{3}[\s-]?[\d]{4}(?!\d)
其中(?:...)
表示非捕获组,或者使用正则表达式的显式捕获标记:
new Regex("...", RegexOptions.ExplicitCapture);