将\n替换为<;br>;在使用python的指定标记之间';s re.sub()

将\n替换为<;br>;在使用python的指定标记之间';s re.sub(),python,html,regex,Python,Html,Regex,我在.tsv文件中有一系列以制表符分隔的html片段。以下是其中一个片段的示例: 从字符串strng=“abc”中创建字母列表,lst 使用列表构造函数list(),从字符串创建列表。 标记,使用正则表达式和re.sub() 我已尝试创建以下正则表达式以匹配所需的换行符: from xml.dom import minidom xmlDocument = minidom.parse('file.tsv') codeItem = xmldoc.getElementsByTagName('co

我在
.tsv
文件中有一系列以制表符分隔的html片段。以下是其中一个片段的示例:

  • 从字符串
    strng=“abc”
    中创建字母列表,
    lst
    • 使用列表构造函数
      list()
      ,从字符串创建列表。
  • 标记,使用正则表达式和
    re.sub()

    我已尝试创建以下正则表达式以匹配所需的换行符:

    from xml.dom import minidom
    xmlDocument = minidom.parse('file.tsv')
    codeItem = xmldoc.getElementsByTagName('code')
    codeItem.firstChild.replaceWholeText(codeItem.firstChild.nodeValue.replace('\n', '<br>'))
    print xmlDocument.toxml()
    
    在所有可能的代码片段中


    编辑:这些代码段不使用“完整”html。它们实际上是要导出到flashcard应用程序中。这些片段中的每一个都代表一个flashcard,它将始终具有相同的受控html结构(由我定义)。因此,在这种情况下使用regex不会产生任何后果。此外,mnemosyne使用的html呈现程序不会在
    标记中断行,因此我尝试使用

    手动执行此操作。如果所有文件都只是html片段,这意味着可以解析XML,那么最好的方法就是使用XML解析器:

    从xml.dom导入minidom
    xmlDocument=minidom.parse('file.tsv')
    codeItem=xmldoc.getElementsByTagName('code'))
    codeItem.firstChild.replaceWholeText(codeItem.firstChild.nodeValue.replace('\n','
    ')) 打印xmlDocument.toxml()
    如果所有文件都只是HTML片段,这意味着可以解析XML,那么最好的方法就是使用XML解析器:

    从xml.dom导入minidom
    xmlDocument=minidom.parse('file.tsv')
    codeItem=xmldoc.getElementsByTagName('code'))
    codeItem.firstChild.replaceWholeText(codeItem.firstChild.nodeValue.replace('\n','
    ')) 打印xmlDocument.toxml()
    如果您对输入有足够的信心,可以继续使用正则表达式而不是HTML解析器,一种更简单的方法可能是在
    re.sub
    中使用函数作为替换,分两步进行替换:


    如果您对输入有足够的信心,可以继续使用正则表达式而不是HTML解析器,一种更简单的方法可能是在
    re.sub
    中使用函数作为替换,分两步进行替换:


    为什么不使用xml解析器?请不要这样做(用正则表达式解析HTML)。使用BeautifulSoup或类似工具进行解析,并修改您所关心的元素中的文本。因此,我将问人们不喜欢的问题:为什么,考虑到
    通常都会这样做?这是解决方法的一部分吗?您真正的问题是消除常见缩进?这些代码段不使用“完整”html。它们实际上只是要导出到flashcard应用程序的文件。每个片段都代表一个flashcard,它将始终具有相同的受控html结构(由我定义)。因此,在这种情况下,使用正则表达式不会产生任何后果。@David:当然,作为介绍问题的一句简短的话,它不会伤害:)为什么不使用xml解析器?请不要这样做(使用正则表达式解析html)! . 使用BeautifulSoup或类似工具进行解析,并修改您所关心的元素中的文本。因此,我将问人们不喜欢的问题:为什么,考虑到
    通常都会这样做?这是解决方法的一部分吗?您真正的问题是消除常见缩进?这些代码段不使用“完整”html。它们实际上只是要导出到flashcard应用程序的文件。每个片段都代表一个flashcard,它将始终具有相同的受控html结构(由我定义)。因此,在这种情况下使用正则表达式不会产生任何后果。@David:当然,作为介绍问题的一句简短的话,它不会有什么坏处:)
    (?<=<pre><code)\r\n?|\n
    
    from xml.dom import minidom
    xmlDocument = minidom.parse('file.tsv')
    codeItem = xmldoc.getElementsByTagName('code')
    codeItem.firstChild.replaceWholeText(codeItem.firstChild.nodeValue.replace('\n', '<br>'))
    print xmlDocument.toxml()
    
    def nl2br(text):
        return "<br>".join(text.splitlines())
    
    
    re.sub("(<pre><code[^>]*>)(.*?)(</code></pre>)", lambda m: m.group(1) + nl2br(m.group(2)) + m.group(3), html, flags=re.DOTALL)