代码之家  ›  专栏  ›  技术社区  ›  xtian

Jupyter笔记本的搜索和替换不像Regex101的javascript那么贪婪。

  •  1
  • xtian  · 技术社区  · 6 年前

    我有很多 logger.*() 我要转换为Simple的函数 print() Jupyter笔记本上的声明。我已经更改了行首: logger.*( .现在我要修好尾巴换衣服 ", e " % (e 以下内容:

    print("(%s):\n"
            "    Failed to load logger" % (e, ))
    
    logger.error("(%s):\n"
            "    Validation Testing errors occurred. '%s'",
            e, report_file)
    
    logger.critical("(%s):\n"
            "    Failed to return Parsed Report "
            "    in debug mode.", e)
    
    logger.critical("(%s):\n"
            "    Error loading template.", e)
    

    使用regex101测试我的javascript regex,我写了

    print\("[\s\S.]*(", e)
    

    但在Jupyter的“查找和替换”中,这只捕获了 print("(%s)\n" .

    1 回复  |  直到 6 年前
        1
  •  1
  •   wp78de    6 年前

    搜索和替换预览仅显示一行。尽管如此,regex replace还是可以跨多行工作。可以按照建议替换示例字符串:

    print\(“[\s\s]*?”,E\)
    

    当对话框显示0时,替换仍然有效:

    注意:我已经修改了你的搜索模式。修改后的点应与lazy,[\s\s]*匹配?为了避免匹配太多。另外,我删除了捕获组,看起来您不需要它。


    update:结果显示,捕获组需要反转才能替换有问题的字符串(kudos to xtian):。

    搜索:

    (print\(“[\s\s.]*)”,e
    

    替换:

    $1“%(e,
    
    建议:

    print\("[\s\S]*?", e\)
    

    对话框显示0时,替换仍然有效:

    enter image description here

    注意:我已经修改了你的搜索模式。修改后的点应该与lazy匹配,[\s\S]*?以避免匹配过多。另外,我删除了捕获组,看起来您不需要它。


    更新:结果显示,捕获组需要反转才能替换有问题的字符串(对Xtian的尊敬):

    搜索:

    (print\("[\s\S.]*)", e
    

    替换:

    $1 " % (e,