我正在尝试制作一个正则表达式,如果有嵌套括号,它只会匹配中间括号。例如,如果输入x(x + 3(x + 3)),我希望它只匹配(x + 3)。我的程序中已经有几个正则表达式涉及括号,我发现它们总是匹配它们找到的第一个括号实例。在上面的例子中,我的正则表达式匹配(x + 3(x + 3),我想这应该是显而易见的但我在开始时没有想到它。基本上,我希望它匹配一组括号内不包含'('或')'字符的括号。
这是我的单个括号的正则表达式:re.compile(r'(\ S +?)')。 我会使用某种负面的外观,但我认为这会分别在开头和结尾阻止必要的开括号和右括号......
我正在使用Python。当我说'括号'我的意思是括号,但在英式英语中我们说括号:)
提前致谢!
答案 0 :(得分:2)
最简单的方法来捕捉不需要其他东西的东西是
[^ ....]
- ^不允许[]内的任何内容 - 作为一个特殊功能,你不需要在其中转义括号 - 所以通过声明你的正则表达式
r'(\([^()]+\))'
你基本上捕获一个文字(
跟随bei 1+任何事情,但(
和)
后跟文字)
。
来自Regex Syntax:
- 可以通过补充集合来匹配不在范围内的字符。如果集合的第一个字符是
^
,则全部 将匹配不在集合中的字符。例如,[^5]
将匹配除' 5'之外的任何字符,而[^^]
将匹配任何字符 字符除了' ^'。如果它不是第一个,则没有特殊意义 集中的角色。- 匹配文字']'在一个集合中,在它前面加一个反斜杠,或者将它放在集合的开头。例如,
[()[\]{}]
和[]()[{}]
都匹配括号。
代码:
t = "x(x+3(x+3))"
import re
m = re.findall(r"(\([^()]+\))", t)
print(m[0])
输出:
(x+3)