正则表达式匹配括号或括号内的字符串中的数字
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)
类似字符串。以上是关于正则表达式匹配括号或括号内的字符串中的数字的主要内容,如果未能解决你的问题,请参考以下文章