【问题标题】:Python regex pattern to match text inside xml stringPython正则表达式模式匹配xml字符串中的文本
【发布时间】:2018-12-20 19:06:45
【问题描述】:

我正在解析一个 XML 文件,需要从最终输出中删除一些混乱。

str = <?xml version="1.0" encoding="UTF-8" standalone="yes"?><chat-message>2018-10

我的解决方案是:

re.sub(r'<(\w|\d|\s){1,}>{1,4}',"",str)

我想要的输出是:

2018-10

目前 Python 没有找到匹配项,只返回 str。我不认为&lt;&gt; 是特殊字符,因此不需要转义;无论如何我都尝试逃跑,但它仍然不起作用。

【问题讨论】:

  • 您能否再举一些例子,很难推断出您想要精确匹配的内容。现在可能像 re.sub(r'.*>(?! 而不是紧跟一个

标签: python regex xml


【解决方案1】:

在我看来,最好使用 XML 解析器而不是正则表达式。这是一个使用xml.etree.ElementTree的例子:

import xml.etree.ElementTree as ET

xmlstring = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><chat-message>2018-10</chat-message>'
root = ET.fromstring(xmlstring)

print(root.text)
# OUTPUT
# 2018-10

【讨论】:

  • 已经这样做了。 xml 标记的剩余部分保留在解析器输出中。
  • @MSanders 如果 xml 有效,那么您可以发布一个给您带来麻烦的 xml 示例,我们可能会提供帮助。
  • xml 中有很多敏感信息(SSN、帐号等)。编辑/删除此信息所花费的时间将是疯狂的。
【解决方案2】:

你可以试试更简单的:

re.sub(r'<.*?>', '', str)

【讨论】:

  • 赢家鸡肉晚餐弗雷德!正则表达式的前瞻功能让我非常困惑。我在网上读过一些东西,但无法理解它。谢谢。
【解决方案3】:

此正则表达式适用于您问题中的测试用例 -

r"<[\w\D]+>([-\d]+)"

你可以在这里测试它-

https://regex101.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2020-11-29
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多