Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:子模式不';无法替换找到的所有图案_Python_Regex_Replace - Fatal编程技术网

Python:子模式不';无法替换找到的所有图案

Python:子模式不';无法替换找到的所有图案,python,regex,replace,Python,Regex,Replace,我正在尝试获取以下代码: pattern = r"#(.*?)#" pattern_obj = re.compile(pattern, re.MULTILINE) translation = pattern_obj.sub("<li>\\1</li>", translation) pattern=r“#(.*)#” pattern_obj=re.compile(pattern,re.MULTILINE) translation=模式对象sub(“\\1”,transla

我正在尝试获取以下代码:

pattern = r"#(.*?)#"
pattern_obj = re.compile(pattern, re.MULTILINE)
translation = pattern_obj.sub("<li>\\1</li>", translation)
pattern=r“#(.*)#”
pattern_obj=re.compile(pattern,re.MULTILINE)
translation=模式对象sub(“
  • \\1
  • ”,translation)
    查找由#包围的任何文本。它将替换第一个实例

    >>><li> TEXT </li>
    
    # More TEXT #
    
    # Even more TEXT #
    
    >>
  • 文本
  • #更多文本# #更多文本#
    有人能帮我吗

    提前谢谢你

    编辑: 我只是这样解决了这个问题

    pattern = r"#([^#]*)#"
    pattern_obj = re.compile(pattern, re.MULTILINE)
    translation = pattern_obj.sub("<li>\\1</li>", translation)
    
    pattern=r“#([^#]*)#”
    pattern_obj=re.compile(pattern,re.MULTILINE)
    translation=模式对象sub(“
  • \\1
  • ”,translation)
    来自:

    (点。)在默认模式下,它匹配除a以外的任何字符 新线。如果指定了DOTALL标志,则该标志与任何 包含换行符的字符

    由于
    与新行不匹配,因此表达式仅查找匹配的第一行

    但是,设置
    DOTALL
    标志也没有帮助。一般来说,由于正则表达式特殊字符是贪婪的,因此最终将匹配第一个
    和最后一个
    之间的所有文本


    我可能弄错了,但我相信您需要逐行执行此操作。

    即使没有“re.MULTLINE”,它也适用于我。奇怪的是,手动排除
    #
    修复了此问题。我本以为非贪婪的
    *?
    会阻止这成为一个问题。也许括号把
    *?
    的范围搞乱了。
    *
    之后的
    使它不贪婪。即使
    *
    是贪婪的,一旦
    无法匹配新行,它将开始退出匹配,直到它能够匹配
    。因此,这根本不应该影响执行。