【发布时间】:2022-11-04 04:40:25
【问题描述】:
当且仅当此类文本由指定数量的单词组成时,我需要一个正则表达式来提取起始字符和结束字符(在我的示例中为左括号和右括号)之间的文本。
在这种情况下,我正在使用此正则(非常简单)。
re.findall("(?<=\()(.*?)(?=\))", "bla bla (bla bla) bla bla")
actual output: ['bla bla']
但是失败了:
re.findall("(?<=\()(.*?)(?=\))", "bla bla (bla ( bla bla) bla bla")
actual output: ['bla ( bla bla']
desired output: [' bla bla']
我想知道是否可以扩展 (.*?) 部分以便按条件搜索。
想象一下,如果它们之间的文本由两个单词组成,则捕获两个括号之间的所有文本
re.findall("(?<=\()(.*?)(?=\))", "bla bla (bla ( bla bla) bla bla (bla bla bla) bla")
desired output: [' bla bla']
你能帮助我吗?
【问题讨论】:
-
对于第二点,不是允许括号之间的所有字符( .* ),您可以使用 [^(]* 排除“(”: re.findall("(?<=()([^(]*? )(?=))”,“ bla bla(bla(bla bla)bla bla bla”)。也在最后一个示例上尝试。