【问题标题】:python regex to catch text between innermost bracketspython 正则表达式捕获最里面的括号之间的文本
【发布时间】: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”)。也在最后一个示例上尝试。

标签: python regex


【解决方案1】:

如果您想在(...) 之间匹配两个不包含字符() 的单词,您可以使用捕获组来获取内部值:

((s*[^s()]+s+[^s()]+s*))

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2019-01-20
    • 1970-01-01
    • 2019-05-17
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多