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

时间:2017-11-09 23:31:04

标签: c# regex string-matching parentheses

我有两个字符串:

(123)4567890
1234567890

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

(?:(?:\(\d{3}\))|(?:\d{3}))\d{7}

使用OR来匹配以下两种情况之一:

\(\d{3}\)
\d{3}

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

1 个答案:

答案 0 :(得分:6)

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

(\()?\d{3}(?(1)\))\d{7}

请参阅regex demo。根据要求添加锚点/边界。

<强>详情

  • (\()? - 与(字符
  • 匹配的可选捕获组1
  • \d{3} - 3位数
  • (?(1)\)) - 如果第1组匹配,则匹配)
  • \d{7} - 7位数。