【问题标题】:Using Regex to extract a specific xml tag使用 Regex 提取特定的 xml 标签
【发布时间】:2017-10-30 16:41:32
【问题描述】:

我有这个 xml 字符串

<aof xmlns="http://tsng.jun.net/jppos/conig/hello"><num>3</num><desc>addy02</desc><tpcs>5</tpcs></aof>'

我需要使用正则表达式提取 5。

我所做的是:

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

其中标签是“tpcs” 但它返回空标签。

有人可以帮忙吗。

【问题讨论】:

标签: regex python-2.7 xml-parsing regex-negation


【解决方案1】:

Don'tuseregexpsfor XML/HTMLRead this,该网站上投票最多和排名最高的答案之一!

改用XPath

//tpcs/text()

或(命名空间-不可知论):

//*[local-name()='tpcs']/text()

将按预期打印5

【讨论】:

    【解决方案2】:

    正如 cmets 中所发布的,这个正则表达式可以解决问题:

    (?<=<tpcs>).*?(?=<\/tpcs>)
    

    this demo 所示。

    说明:

    • (?&lt;=&lt;tpcs&gt;) 是一个正向的后视 (?...),它断言某个字符串 &lt;tpcs&gt; 放在要匹配的字符串之前。
    • .*? 点匹配任何字符,零次或多次,因为它后面跟着 *。最后,它旁边的 ? 字符是一个惰性量词,这意味着它会匹配到第一次出现接下来的内容。
    • (?=&lt;\/tpcs&gt;) 是正向前瞻 (?=...),它断言字符串遵循模式。

    【讨论】:

    • 你知道如何通过变量传递标签吗?正要研究它(我这辈子没做过多少python)
    • 是的,我明白了。这是一个 '(?).*(?=)'.format(tag)
    • 再次感谢 :) 你知道任何这样的教程,我可以在哪里了解正则表达式?
    • 嗯,你可以试试this website,好像有一些练习可以帮助你理解和学习。否则,您可以很容易地找到正则表达式备忘单,例如 this one。它们是保留正则表达式字母表的好方法。最后,我建议只在在线测试仪上练习,Regex101.com 非常好,我一直在使用它。右下角有一个快速参考。它还详细说明了右上角的匹配过程。
    • 非常感谢。我有最后一个问题,如果文本中有多个 tpc,我可以使用这个特定的正则表达式找到它吗?
    猜你喜欢
    • 2016-06-10
    • 2018-01-02
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多