【问题标题】:Python Regex: To capture all words within nested parenthesesPython Regex:捕获嵌套括号内的所有单词
【发布时间】:2019-11-16 08:37:55
【问题描述】:

我正在尝试使用正则表达式提取嵌套括号内的所有单词。这是我的.txt 文件的示例:

hello ((

(alpha123_4rf)
45beta_Frank))
Red5Great_Sam_Fun

我已经用正则表达式试过了:

r'[\((?\(??(^\()?\))]'

但未能获得所需的输出。我希望我的输出是这样的:

((

(alpha123_4rf)
 45beta_Frank))

我做错了什么?非常感谢任何帮助!

【问题讨论】:

  • 如果你想要任意数量的嵌套括号,你需要子表达式调用,但 re 模块不支持。你可以使用第三方 regex 模块
  • @Sundeep hm...什么是第三方regex?对不起,因为我在 python 中处于新手级别
  • 是的,在上面的链接问题中,regex 模块有一个解决方案。regex.findall(r'\((?:[^()]++|(?0))++\)', s) 适用于任何级别的嵌套

标签: python regex python-3.x


【解决方案1】:

如果括号直接相互跟随,这个更简单的解决方案也可以做到:

def find_brackets(text):
    rx = "(?s)\(\((.+)\)\)"
    z = re.search(rx,text)
    if z: 
        return  z[0] 
    else: 
        return ''

【讨论】:

    【解决方案2】:

    试试这个模式(?s)\([^(]*\((.+)\)[^)]*\)

    解释:

    (?s) - 标志:单行模式 - . 也匹配换行符

    \( - 匹配 ( 字面意思

    [^(]* - 匹配除(之外的零个或多个字符

    \( - 匹配 ( 字面意思

    (.+) - 匹配任意字符中的一个或 mroe 并将其存储在第一个捕获组中

    \) - 匹配 ) 字面意思

    [^)]* - 匹配除)之外的零个或多个字符

    \) - 匹配 ) 字面意思

    Demo

    【讨论】:

    • 感谢 Michal 的详细解释。它有效!
    • 嘿 Michal,如果我的嵌套括号不一致怎么办?假设我有另一个是这样的(选择xxxxx,xxxx(xx)作为xxxxxx,xxxx(xyzz)作为kkk,cas((hello((cas(xxx作为abc'yxys'))作为来自kjdkj和hsx gkgkg的afkk = rate'98209''; ); 退出;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多