<span id="lduzc"><sup id="lduzc"></sup></span>
    1. <span id="lduzc"><sup id="lduzc"></sup></span>
      <span id="lduzc"><sup id="lduzc"><object id="lduzc"></object></sup></span>

      <acronym id="lduzc"></acronym><span id="lduzc"></span>
      專注Java教育13年 全國咨詢/投訴熱線:400-8080-105

      首頁 hot資訊 使用python正則表達式匹配字符串

      使用python正則表達式匹配字符串

      更新時間:2022-01-11 09:58 來源:動力節點 瀏覽18次

      python正則表達式匹配字符串的方法:

      1.使用【(.+?)】這個正則表達式來提取單個位置的字符串;

      2.使用【(?P…)】這個正則表達式匹配連續多個位置的字符串。

      python正則表達式匹配字符串的方法:

      1.單個位置的字符串提取

      這種情況我們可以使用(.+?)這個正則表達式來提取。 舉例,一個字符串"a123b",如果我們想提取ab之間的值123,可以使用findall配合正則表達式,這樣會返回一個包含所以符合情況的list。

      代碼如下:

      import re
      str = "a123b"
      print re.findall(r"a(.+?)b",str)#
      輸出['123']

      (1)貪婪和非貪婪匹配

      如果我們有一個字符串”a123b456b”,如果我們想匹配a和最后一個b之間的所有值而非a和第一個出現的b之間的值,可以用?來控制正則貪婪和非貪婪匹配的情況。

      代碼如下:

      import re
      str = "a123b456b"
      print re.findall(r"a(.+?)b", str)
      #輸出['123']#?控制只匹配0或1個,所以只會輸出和最近的b之間的匹配情況 
      print re.findall(r"a(.+)b", str)
      #輸出['123b456']  
      print re.findall(r"a(.*)b", str)
      #輸出['123b456']

      (2)多行匹配

      如果你要多行匹配,那么需要加上re.S和re.M標志. 加上re.S后。將會匹配換行符,默認.不會匹配換行符。

      代碼如下:

      str = "a23b\na34b"  
      re.findall(r"a(\d+)b.+a(\d+)b", str)
      #輸出[]
      #因為不能處理str中間有\n換行的情況 
      re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
      #s輸出[('23', '34')]

      加上re.M后,^$標志將會匹配每一行,默認^和$只會匹配第一行。

      代碼如下:

      str = "a23b\na34b" 
      re.findall(r"^a(\d+)b", str)
      #輸出['23'] 
      re.findall(r"^a(\d+)b", str, re.M)
      #輸出['23', '34']

      2.連續多個位置的字符串提取

      這種情況我們可以使用(?P…)這個正則表達式來提取。舉例,如果我們有一行webserver的access日志:'192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"',我們想提取這行日志里面所有的內容,可以寫多個(?Pexpr)來提取,其中name可以更改為你為該位置字符串命名的變量,expr改成提取位置的正則即可。

      代碼如下:

      import re
      line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search"
      "Mozilla/5.0"'
      reg = re.compile('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" 
      (?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"')
      regMatch = reg.match(line)
      linebits = regMatch.groupdict()
      print linebits
      for k, v in linebits.items() :
       print k+": "+v

      輸出的結果為:

      status: 200
      referrer: 
      request: GET /api HTTP/1.1
      user_agent: Mozilla/5.0
      date: 25/Oct/2012:14:46:34size: 44
      remote_ip: 192.168.0.1

       

      提交申請后,顧問老師會電話與您溝通安排學習

      免費課程推薦 >>
      技術文檔推薦 >>

      返回頂部
      91最新偷拍精品,91国产aⅴ在线高清观看 五月丁香综合 制服师生 一级午夜免