使用Regex提取特定的xml标记

时间:2017-10-30 16:41:33

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

我有这个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' 但它返回空标签。

有人可以帮忙。

2 个答案:

答案 0 :(得分:2)

Don't use regexps for XML / HTMLRead this,投票最多的人之一本网站排名最高的答案!

改为使用XPath

//tpcs/text()

或(namespace-gnostic):

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

将按预期打印5

答案 1 :(得分:-1)

正如评论中所述,这个正则表达式可以解决问题:

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

this demo中所示。

说明:

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