使用正则表达式提取特定的 xml 标签

Using Regex to extract a specific xml tag

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

有人可以帮忙吗。

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

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

this demo 中所示。

解释:

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

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

改用XPath

//tpcs/text()

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

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

将按预期打印 5