如何在 python 中使用正则表达式区分列表模式

How to distinguish list pattern using a regex in python

我试图在不使用 python 包的情况下将 XML 转换为 JSON。为此,我将 XML 转换为一个列表,该列表最终将转换为嵌套字典,然后再转换为 JSON。从列表中读取 XML 时,我无法区分以下元素:

  1. <Description>TestData</Description>\n
  2. Data</Description>\n
  3. <Description>Test\n

我用来区分 1 和 3 的正则表达式是:

  1. x = re.compile("<Description>(.+?)<\/Description>\n")
  2. x = re.compile("^((?!Description).)*<\/Description>\n")

我发现很难为第三个开发正则表达式。

  1. x = re.compile("\s*<Description>(.+)(?!((<\/Description>)))\n")

尽管第二个正则表达式正确识别了文本 3它也识别了文本 1。这应该只识别文本 3.

你们非常亲密。此正则表达式可满足您的需要:

re.compile("\s*<Description>(.+)(?<!<\/Description>)\n")

我刚刚在 ?和 !做出否定的后视断言。检查此以获取更多信息:https://docs.python.org/2/library/re.html

你想要这样的东西吗?

<Description>([^<]+)\n

Demo

python脚本是

 ss=""" <Description>TestData</Description>\n
  Data</Description>\n
  <Description>Test\n"""

regx= re.compile("<Description>([^<]+)\n")
capture=regx.findall(ss)
print(capture)

输出是

['Test']

看来capture[0]值就是你想要的..