正则表达式匹配特定XML标记之间的内容

时间:2016-03-03 14:37:22

标签: python regex xml

是否有可能匹配XML标记之间的某些内容,具体取决于具体值。要匹配的代码:

  <data>
    <ns3:createGroupMessageRes>
      <ns3:statusCode>200</ns3:statusCode>
      <ns3:messageId>65683</ns3:messageId>
    </ns3:createGroupMessageRes>
  </data>
  <data>
    <ns3:createGroupMessageRes>
      <ns3:statusCode>200</ns3:statusCode>
      <ns3:messageId>65685</ns3:messageId>
    </ns3:createGroupMessageRes>
  </data>

我希望匹配该部分,但取决于messageID值(例如,如上例所示的6556):

    <ns3:createGroupMessageRes>
      <ns3:statusCode>XXX</ns3:statusCode>
      <ns3:messageId>XXXX</ns3:messageId>
    </ns3:createGroupMessageRes>

我尝试了很多可能的表达方式,但没有一个能够奏效。感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

请试试这个:

# tested with python 2.7x
import re
stringIn = """
  <data>
    <ns3:createGroupMessageRes>
      <ns3:statusCode>200</ns3:statusCode>
      <ns3:messageId>65683</ns3:messageId>
    </ns3:createGroupMessageRes>
  </data>
  <data>
    <ns3:createGroupMessageRes>
      <ns3:statusCode>200</ns3:statusCode>
      <ns3:messageId>65685</ns3:messageId>
    </ns3:createGroupMessageRes>
  </data>
  """
q = lambda mId:  [ block[1] for block in re.findall(r'<(?P<p>[^>]+)>\n((?:\s*<ns3:.*)*>%i</ns3:messageId>\s+</ns3:.*)\s+</(?P=p)>' % (mId), stringIn) ]
print q(65685)

输出:

['    <ns3:createGroupMessageRes>
        <ns3:statusCode>200</ns3:statusCode>
        <ns3:messageId>65685</ns3:messageId>
      </ns3:createGroupMessageRes>']