忽略XML中的正则表达式换行

时间:2019-05-31 17:31:46

标签: regex xml python-3.x

这是针对特定用途的项目。

我试图找到如何从xml中查找任何空文本并将其替换为消息。

regex = re.compile(r'>\s*</')


replaced = re.sub(regex, ">[!] JSON value does not exist, Check your Json!</", temp)

例如文件名为空

        <file>               
            <fileType>Mezza</fileType>
            <fileName></fileName>
            <segments>0000</segments>
        </file>

,输出将是:

         <file>               
            <fileType>Mezza</fileType>
            <fileName>[!] value does not exist!</fileName>
            <segments>0000</segments>
        </file>

但是,对于其他我有空格和换行符的地方,我不想收到此消息,这两个标记名不同,有一个新行,并且它们正在关闭标记,我该如何在regex中实现此功能? / p>

</fileName>[!] value does not exist!</file>

2 个答案:

答案 0 :(得分:1)

使用[ \t]*代替\s*。这将匹配空格和制表符,但不匹配换行符。因此代码应为:

regex = re.compile(r'>[ \t]*</')

DEMO

答案 1 :(得分:0)

也许,我们这里可能遇到的另一种选择是找到filename,并用可能的表达式替换标签中我们想要的内容,例如:

(<fileName>)(.+)?(<\/fileName>)

如果我正确理解问题。

Demo 1

如果我们有完全空的标签,则此表达式可能会起作用:

(>)()(<\/)

Demo 2

如果我们将使用空标签和带有水平空格的标签,则将其扩展为:

(>)(|[^\S\r\n]+)(<\/)

Demo 3

测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(<fileName>)(.+)?(<\/fileName>)"

test_str = ("        <file>               \n"
    "            <fileType>Mezza</fileType>\n"
    "            <fileName></fileName>\n"
    "            <segments>0000</segments>\n"
    "        </file>")

subst = "\\1[!] value does not exist!\\3"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.