代码之家  ›  专栏  ›  技术社区  ›  Krishnendu

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

  •  0
  • Krishnendu  · 技术社区  · 8 年前

    我正在尝试在不使用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。

    2 回复  |  直到 8 年前
        1
  •  1
  •   A. Barrozo    8 年前

    你非常接近。此正则表达式适用于您需要的内容:

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

    我刚刚添加了“<”在之间?和做出一个否定的lookbehind断言。查看此项了解更多信息: https://docs.python.org/2/library/re.html

        2
  •  1
  •   Jon Clements    8 年前

    你想要这样的东西吗?

    <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] 价值就是你想要的。。