正则表达式可匹配括号或括号

时间:2020-03-27 20:11:19

标签: c# regex match

我有一个数据集,其中每行包含一个括在一组括号或方括号内的数字。例如

Jim Bob Smith [1975] 
Joe Bob Public (1955)

我遇到的问题是创建一个正则表达式,该表达式将匹配在两种情况下都可以使用的数字(不带括号或括号)。

我尝试过

(?<=\[).+?(?=\]) and
(?<=\().+?(?=\))

因此,我需要帮助找到将两者结合的方法。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用以下.NET正则表达式:

(?:(\()|\[)(.*?)(?(1)\)|])

请参见regex demo

详细信息

  • (?:(\()|\[)-一个non-capturing group,它与一个(字符匹配并将其捕获到组1中,否则仅匹配一个[字符
  • (.*?)-第2组:除换行符以外的任何0个或多个字符,并且尽可能少(您可能要在其中使用.*?来匹配1,而不是\d+或更多位数,或\d{4}仅精确匹配四位数字,或什至(?:20|19)\d{2}匹配20和21世纪的一年。)
  • (?(1)\)|])-一个conditional construct:如果第1组匹配,则匹配),否则,匹配]字符。

答案 1 :(得分:1)

尝试

.*?[[(](\d{4})[])]

请参见here

  1. .*?-非贪婪的任何字符
  2. [[(]开头的两个报价
  3. (\d{4})-创建所需的4位数字捕获组。
  4. [])]结束报价