如何在Python中匹配精确的“多个”字符串

时间:2018-01-19 09:03:43

标签: python regex

我想为SOAP / XML进行实时数据包监控。这是代码。

from scapy.all import *   

def pack_callback(packet):

    if packet["TCP"].payload:  
        payload = str(packet["TCP"].payload)  

        Code = '<ResponseCode>(.*?)<|<ResponseRunTime>(.*?)<'

        pat = re.compile(Code) 
        n = pat.findall(payload)
        if n:
            #print n.groups()
            print n

sniff(filter='tcp and port 186 or port 86',prn=pack_callback,iface='vmxnet3 Ethernet Adapter')`

但如果我使用re.search,我得到('0', None),当我使用re.findall时,我得到了[('0', ''), ('', '1763')]

我的问题是,如何才能获得('0', '1763')? 我的意思是第一次匹配<ResponseCode>(.*?)<然后匹配<ResponseRunTime>(.*?)<不是每次都从头开始搜索XML。

SOAP响应如下:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Body>
      <ns3:RetrieveQuotationResponse xmlns>
         <ResponseVersion>5</ResponseVersion>
         <ResponseCode>0</ResponseCode>
         <ResponseMessage>Correct Petition</ResponseMessage>
         <ResponseRunTime>1887</ResponseRunTime>
         <ResponseData>
            <billingDays>2</billingDays>
            <destinationCurrencyValue>0.0</destinationCurrencyValue>
            <dropOffDate>2018-02-23</dropOffDate>
            <dropOffOfficeId>D2</dropOffOfficeId>
            <dropOffOfficeNameParis</dropOffOfficeName>
            <dropOffTime>09:00</dropOffTime>
            <pickUpDate>2018-02-21</pickUpDate>
            <pickUpOfficeId>D2</pickUpOfficeId>
            <pickUpOfficeName>Paris</pickUpOfficeName>
            <pickUpTime>09:00</pickUpTime>
            <quotationNote>There Are 29 Car Types Availables.</quotationNote>
            <quotationOptions>

速度几乎是每秒110包。 这就是我想要保持wordround尽可能少的原因,否则Python可以不那么快地处理所有的pakets。

感谢。

0 个答案:

没有答案