匹配嵌套编号组内的数字

时间:2013-09-13 02:33:14

标签: regex

我试图在我的数据中单独找到并捕获(和)内的所有数字,忽略其余的数字。

我的数据看起来像这样

21 [42] (12) 19 25 [44] (25 26 27) 17 (14 3) 8 1 6 (19)

所以我想查找12252627143和{{1}的匹配项}

我尝试19,但这只会给我\((\d+)\)*122514

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您可以将正向前瞻与前瞻阴性相结合,以获得所需的效果。

(\d+)(?=(?:.(?!\())*\))

正则表达式:

(           group and capture to \1:
 \d+        digits (0-9) (1 or more times)
)           end of \1
(?=         look ahead to see if there is:
 (?:        group, but do not capture (0 or more times)
   .        any character except \n
   (?!      look ahead to see if there is not:
    \(      '('
   )        end of look-ahead
)*          end of grouping
 \)         ')'
)           end of look-ahead

查看demo

答案 1 :(得分:0)

使用此模式\d+(?=(((?!\().)*)\))示例here

已修改为以下(\d+)(?=(?:(?!\().)*\)) demo

答案 2 :(得分:0)

我没有看到任何筑巢。嵌套意味着这样的事情:

12 (34 (56) 78) 90

如果你真的有这样的数据 - 特别是如果你不知道嵌套有多深 - 我建议你不要使用正则表达式。但你的问题看起来很简单;这应该是你所需要的:

\d+(?=[^()]*\))

与其他答案一样,前瞻声明前方有一个闭合支架,此处和那里之间没有开口括号。我也排除了关闭括号,主要是为了提高效率。否则它最初会在)之后放大,只需要回溯到它。