1. 程式人生 > >Python學習筆記之正則表示式

Python學習筆記之正則表示式

1、import re    # 匯入python正則表示式模組

2、正則匹配兩種方式:

p = re.compile(r'imooc')    # 生成Pattern物件
res = p.match('imooc python')    # 呼叫 patern 物件的 match 方法匹配字串,結果返回一個 match 物件或 None
print (res.group())    # group() 從物件獲取匹配的值  imooc
print (res.span())    # span() 從物件獲取匹配的起始位置  (0, 5)
res = re.match(pattern, str )    # 在字串中從頭開始匹配,結果返回一個 match 物件或 None
res = re.search(pattern, str)    # 在字串中匹配第一個子串,結果返回一個 search 物件或 None
res = re.findall(pattern, str)    # 查詢所有子串,結果返回一個List,所有匹配到的子串
re.sub(pattern, repl, str, count = 0)    # 匹配替換,repl替換字串,可以是一個函式物件,count匹配次數
re.split(pattern, str, maxsplit = 0)    # 根據匹配分割字串,返回一個List

3、正則表到式語法:

.          #匹配任意字元
[abc]   #匹配任意字符集abc中的任一個字元
\d       #匹配數字                                \D      #匹配非數字
\s        #匹配空白字元                         \S      #匹配非空白字元
\w       #匹配字元[a-zA-Z0-9]             \W      #匹配非[a-zA-Z0-9]字元
*         #匹配0或多次
+        #匹配1或多次
?         #匹配最多一次
{m}      #匹配m次                               {m, n}  #匹配m到n次
*?        #非貪婪模式,儘可能少匹配字元,出現了也不匹配
+?       #非貪婪模式,儘可能少匹配字元,只匹配一次,再出現就不匹配了
??        #非貪婪模式,儘可能少匹配字元,最多一次,最少不匹配
^         #匹配開頭^.
$         #匹配結尾.$
\A       #指定以以某字串開頭\A...     \Z      #指定以某字串結尾\Z...
|          #匹配左右任意一個表示式

(a|b)   #括號中的表示式作為分組

4、正則表示式練習:(簡單爬蟲,爬取慕課網網站圖片並儲存在本地,Python版本3.0以下)

# 1.抓取網頁
# 2.獲取圖片地址

# 3.抓取圖片內容並儲存到本地

# -*- coding:utf-8 -*-
import urllib2
import re

#請求網頁並讀取
res = urllib2.urlopen('http://www.imooc.com/course/list').read()
#篩選出圖片地址,使用正則表示式匹配符合條件的網址
url_list = re.findall(r'//.+?\.jpg', res)
url_map = map(lambda x: 'http:'+x, url_list[::2])
url_set = set(url_map)

#獲取圖片寫入到jpg檔案
i = 0
for url in url_map:
    f = open('imooc_img/'+str(i)+'.jpg', 'w')
    res = urllib2.urlopen(url).read()
    f.write(res)
    i += 1