正则表达式匹配括号或括号内的字符串中的数字

Posted

技术标签:

【中文标题】正则表达式匹配括号或括号内的字符串中的数字【英文标题】:Regex to match number in a string enclosed within brackets or Parenthesis 【发布时间】:2020-07-08 15:12:51 【问题描述】:

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

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

我遇到的问题是创建一个正则表达式,该表达式将匹配在两种条件下都有效的数字(不带括号或括号)。

我试过了

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

所以我需要帮助找到将两者结合起来的方法。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

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

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

见regex demo

详情

(?:(\()|\[) - 一个 non-capturing group 匹配并捕获到组 1 一个 ( 字符,否则只匹配一个 [ 字符 (.*?) - 第 2 组:除换行符之外的任何 0 个或多个字符,尽可能少(而不是 .*?,您可能希望使用 \d+ 匹配 1 个或多个数字,或 \d4 到仅精确匹配四位数字,甚至 (?:20|19)\d2 以匹配 20 日和 21 日的年份。) (?(1)\)|]) - a conditional construct:如果匹配组 1,则匹配 ),否则匹配 ] 字符。

【讨论】:

【参考方案2】:

试试

.*?[[(](\d4)[])]

见here

    .*? - 不贪心任何字符 [[(] 获取开盘报价 (\d4) - 创建您想要的 4 位数捕获组。 [])] 收盘价

【讨论】:

注意 will also match (1235][1234) 类似字符串。

以上是关于正则表达式匹配括号或括号内的字符串中的数字的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式匹配括号中的内容。

数据处理正则表达式中的括号

js 正则表达式获取小括号内的内容,不含括号

怎么用正则表达式匹配中括号内的字符

C# 正则表达式 - 为括号内的单个模式查找一个或多个匹配项

初始正则表达式