python re正則表達式


python的正則表達式庫re
 
正則的常用符號
.     匹配任一字符,換行符\n除外
*     匹配前一個字符0次或無限次
?     匹配前一個字符0次或1次
.*     貪心算法(盡可能多的匹配)
.*?     非貪心算法(盡可能少的匹配)
()     括號內的數據作為結果返回
 
以下簡單介紹幾個主要函數的用法
 
re.match
說明:從字符串的第一個位置開始匹配,匹配到返回,m =re.match("正則表達式",字符串))
import re
m = re.match('"goUrl":"([^"]*)"',response)
print(m.group(0),m.group(1))
print(m.groups())
解釋:re.match()中第一個參數為要匹配的正則表達式(正則表達式用單雙引號括起來,但是如果里面本身包含雙引號,可以用單引號括起來),第二個為要提取的原始文件字符串。
group(0)為提取到的包含goUrl的全部正則內容。group(1)為正則表達式第一個括號內的內容,當然也可以有兩個括號,那就用group(2)來返回,groups()返回一個元祖,所有括號內的內容
match取到一個字符串后返回
 
re.search
說明:在整個字符串中匹配到第一個正則后返回數據,返回一個正則表達是對象(object)
import re
m = re.search('"goUrl":"([^"]*)"',response)
print(m.group(0),m.group(1))
與match的區別:match是從字符串開始進行匹配;search是從字符串的任何部分開始匹配
search也是最多匹配到一個字符串,然后就退出了,group用法與match一樣
 
re.findall
說明:返回字符串中滿足正則表達式的所有字符串。返回結果是一個列表[]
import re
m = re.findall('"goUrl":"([^"]*)"',response)
print(m)
解釋:正則也可以用(),然后列表中的每一個子項,可以用group()來取出來括號內的內容
 
re.compile
說明:將經常使用的正則表達式編譯成一個正則表達式對象,使用更方便
import re
m = re.compile('"goUrl":"([^"]*)"')
print(m.findall(response))
print(m.search(response))
print(m.match(response))
解釋:使用compile與單獨使用findall等操作是一樣的
 
re.sub
說明:將匹配到正則的所有字符串替換為另一個字符串,返回結果是一個字符串
import re
m = re.sub("正則表達式","要替換的內容",源文件)
print(m.findall(response)
 
注意:要替換的內容可以用("%d"%789)來通過外部參數替換要替換的內容
 
re.split
說明:按照正則進行分割,返回一個列表(列表內容不包含分隔符)
import re
m = re.split("正則表達式分隔符",源文件)
print(m)
re.split和python的split的區別:
1.如果分割符是固定字符串,兩個可以混用。re.split("goUrl",response)等價於response.split("goUrl")
2.re.split可以用正則表達式分割,比如re.split("[0-9]*",response),而python的split只能用string類型的字符串分割。
 
re.S
說明:是一個參數,多行匹配。如果不用re.S則在單行中進行匹配,如果用了re.S則在整體中進行字符匹配
 
re.M
說明:是一個參數,^$標志將會匹配每一行。默認情況下是只匹配符合正則的第一行和最后一行
 
一些小技巧:
1.先抓大再抓小
例子a.html如下:
<div class="topic"><a href="xxx"></a>
     <div class="list">
          <ul>
                <li><a href="xxx/1.html">這是第一條</a></li>
                <li><a href="xxx/1.html">這是第二條</a></li>
                <li><a href="xxx/1.html">這是第三條</a></li>
          </ul>
     </div>
</div>
想要抓出這是第一條、這是第二條、這是第三條;如果用'>(.*?)</a>'會抓取到第一行。這時就可以先抓大再抓小,即讀取到<ul>,然后再獲得下面的'></a>'的內容
text_fied=re.findall('<url>(.*?)</ul>'),a.html
 
更多關於re的操作可以參照官網:https://docs.python.org/3.1/library/re.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM