如何创建仅与嵌套括号的中间括号匹配的正则表达式?

时间:2018-04-13 15:12:31

标签: python regex

我正在尝试制作一个正则表达式,如果有嵌套括号,它只会匹配中间括号。例如,如果输入x(x + 3(x + 3)),我希望它只匹配(x + 3)。我的程序中已经有几个正则表达式涉及括号,我发现它们总是匹配它们找到的第一个括号实例。在上面的例子中,我的正则表达式匹配(x + 3(x + 3),我想这应该是显而易见的但我在开始时没有想到它。基本上,我希望它匹配一组括号内不包含'('或')'字符的括号。

这是我的单个括号的正则表达式:re.compile(r'(\ S +?)')。 我会使用某种负面的外观,但我认为这会分别在开头和结尾阻止必要的开括号和右括号......

我正在使用Python。当我说'括号'我的意思是括号,但在英式英语中我们说括号:)

提前致谢!

1 个答案:

答案 0 :(得分:2)

最简单的方法来捕捉不需要其他东西的东西是

[^ ....] - ^不允许[]内的任何内容 - 作为一个特殊功能,你不需要在其中转义括号 - 所以通过声明你的正则表达式

r'(\([^()]+\))'

你基本上捕获一个文字(跟随bei 1+任何事情,但()后跟文字)

请参阅https://regexr.com/3nsfg

来自Regex Syntax

  
      
  • 可以通过补充集合来匹配不在范围内的字符。如果集合的第一个字符是^,则全部   将匹配不在集合中的字符。例如,   [^5]将匹配除' 5'之外的任何字符,而[^^]将匹配任何字符   字符除了' ^'。如果它不是第一个,则没有特殊意义   集中的角色。
  •   
  • 匹配文字']'在一个集合中,在它前面加一个反斜杠,或者将它放在集合的开头。例如,[()[\]{}]   和[]()[{}]都匹配括号。
  •   

代码:

t = "x(x+3(x+3))"

import re

m = re.findall(r"(\([^()]+\))", t)

print(m[0])

输出:

(x+3)