2016-03-03 273 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>'] 
相關問題