如何匹配此字符串使用Regex?

TKX*_*TKX 1 c# regex string-matching parentheses

我有两个字符串:

(123)4567890
1234567890
Run Code Online (Sandbox Code Playgroud)

这对()必须同时出现,或两者都省略.目前我使用这个正则表达式:

(?:(?:\(\d{3}\))|(?:\d{3}))\d{7}
Run Code Online (Sandbox Code Playgroud)

其中使用OR到匹配两个案例之一:

\(\d{3}\)
\d{3}
Run Code Online (Sandbox Code Playgroud)

只是好奇,我如何检查(当前比赛的最后一场比赛(有或没有)(检查))?你能建议我另一种方法来达到同样的效果吗?

Wik*_*żew 6

您可以使用条件构造:捕获可选的开头(然后匹配3位数,然后检查组1是否为空,如果不是,则匹配结束):

(\()?\d{3}(?(1)\))\d{7}
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示.根据要求添加锚点/边界.

细节

  • (\()?- 与(char 匹配的可选捕获组1
  • \d{3} - 3位数
  • (?(1)\)) - 如果组1匹配,则匹配a )
  • \d{7} - 7位数.