使用正则表达式提取特定的 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
。
我有这个 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
。