小能豆

正则表达式仅匹配所有括号外的内容

py

对于这个字符串:hello (hi that [is] so cool) awesome {yeah} 我希望正则表达式仅匹配helloawesome

这是我目前尝试过的方法,但似乎不起作用。https ://regex101.com/r/NsUfQR/1

([^\(\)\[\]\{\}[]()〔〕〈〉【】]+)(?![^()\[\]\{\}[]()〔〕〈〉【】]*[\)\])〕〉】]])

这匹配hello hi that awesome yeah太多了。

是否可以仅使用 Regex 来实现这一点,或者是否有使用 perl 或 python 的另一种方法?


阅读 19

收藏
2024-11-04

共1个答案

小能豆

为了仅匹配不在括号(()[]{} 等)中的 helloawesome,你可以使用正则表达式来查找不在括号中的文本。虽然正则表达式不擅长处理嵌套结构,但在你的示例中,由于嵌套相对简单,可以尝试以下正则表达式来仅匹配 helloawesome

(?<![()\[\]{}])\b\w+\b(?![^\[\](){}]*[\])}])

解释:
1. (?<![()\[\]{}]):确保匹配项前面不是 ([{ 等括号。
2. \b\w+\b:匹配单词边界内的一个或多个单词字符,匹配每个单词。
3. (?![^\[\](){}]*[\])}]):确保单词后面没有以 )]} 结束的任何括号内容。

在 Python 中,可以使用这个正则表达式:

import re

text = "hello (hi that [is] so cool) awesome {yeah}"
matches = re.findall(r"(?<![()\[\]{}])\b\w+\b(?![^\[\](){}]*[\])}])", text)
print(matches)  # 输出:['hello', 'awesome']

这个正则表达式应当匹配 helloawesome,并排除括号内的所有单词。

2024-11-04