对于这个字符串:hello (hi that [is] so cool) awesome {yeah} 我希望正则表达式仅匹配hello和awesome。
hello (hi that [is] so cool) awesome {yeah}
hello
awesome
这是我目前尝试过的方法,但似乎不起作用。https ://regex101.com/r/NsUfQR/1
([^\(\)\[\]\{\}[]()〔〕〈〉【】]+)(?![^()\[\]\{\}[]()〔〕〈〉【】]*[\)\])〕〉】]])
这匹配hello hi that awesome yeah太多了。
hi
that
yeah
是否可以仅使用 Regex 来实现这一点,或者是否有使用 perl 或 python 的另一种方法?
为了仅匹配不在括号(()、[]、{} 等)中的 hello 和 awesome,你可以使用正则表达式来查找不在括号中的文本。虽然正则表达式不擅长处理嵌套结构,但在你的示例中,由于嵌套相对简单,可以尝试以下正则表达式来仅匹配 hello 和 awesome:
()
[]
{}
(?<![()\[\]{}])\b\w+\b(?![^\[\](){}]*[\])}])
解释: 1. (?<![()\[\]{}]):确保匹配项前面不是 (、[、{ 等括号。 2. \b\w+\b:匹配单词边界内的一个或多个单词字符,匹配每个单词。 3. (?![^\[\](){}]*[\])}]):确保单词后面没有以 )、] 或 } 结束的任何括号内容。
(?<![()\[\]{}])
(
[
{
\b\w+\b
(?![^\[\](){}]*[\])}])
)
]
}
在 Python 中,可以使用这个正则表达式:
import re text = "hello (hi that [is] so cool) awesome {yeah}" matches = re.findall(r"(?<![()\[\]{}])\b\w+\b(?![^\[\](){}]*[\])}])", text) print(matches) # 输出:['hello', 'awesome']
这个正则表达式应当匹配 hello 和 awesome,并排除括号内的所有单词。