如何用正则表达式选中包含括号在内的括号间文本?
匹配包含括号本身的括号内文本的正则表达式
核心问题修正
你之前写的()(.*)和((.*))之所以无效,是因为括号在正则表达式里是特殊元字符,用来定义分组,直接写会被当成语法逻辑,而非匹配字面的(和)。另外.*是贪婪匹配,容易过度匹配多个括号的内容。
针对无嵌套括号的解决方案(90%场景适用)
如果你的文本里没有括号嵌套(比如不会出现(a (b) c)这种情况),用下面两种正则都可以:
方案1:非贪婪匹配法
\(.*?\)
- 解释:
\(:转义左括号,匹配字面的(.*?:非贪婪模式匹配任意字符(默认不含换行),直到遇到第一个\)就停止\):转义右括号,匹配字面的)
方案2:排除字符法(更高效)
\([^)]*\)
- 解释:
[^)]:匹配除了右括号之外的任意字符*:匹配前面的字符0次或多次,直到遇到右括号就停止- 这种写法不用回溯,比非贪婪匹配效率更高
示例验证
- 输入:
Text (the text)→ 匹配结果:(the text) - 输入:
Text text text (the text again)→ 匹配结果:(the text again)
关于嵌套括号的补充(可选)
如果你的文本存在括号嵌套(比如(hello (world) test)),上面的正则只能匹配到(hello (,这时候需要用支持递归的正则引擎(比如Python的re模块、PCRE引擎),正则会复杂一些,比如:
\((?:[^()]|(?R))*\)
不过作为新手,先掌握无嵌套场景的写法就足够应付大部分需求了。
内容的提问来源于stack exchange,提问作者Mae Smets
相关产品推荐
相关产品推荐

