2016-03-03 271 views
0

根据具体的值,是否有可能匹配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值(eg65685像例如上面):

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

我已经尝试了很多可能的表情,但没有的他们工作。感谢任何帮助!

+2

[你可能要重新考虑(http://stackoverflow.com/questions/1732348/regex-match-open-tags -except-xhtml-self-contained-tags) –

+0

你是否想要匹配两个 ... blocks?或者你想分析数字值? – Quinn

+0

我想要匹配整个块 ....,但只有这个在messageId字段中值为65685的块。 – ddevilish

回答

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>'] 
相关问题