您好,登錄后才能下訂單哦!
本篇內容主要講解“如何使用Python的正則表達式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用Python的正則表達式”吧!
1.學習爬蟲,為什么必須會正則表達式?
有時候,我們爬取一些網頁具體內容時,會發現我們只需要這個網頁某個標簽的一部分內容,或者是這個標簽的某個屬性的值時,用普通的 xpath 或者css.selector是不能實現我們的想法的,這個時候就必須用到正則表達式去匹配獲取。
2.正則表達式官方簡介?
正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。
day01:
1'''
2author : 極簡XksA
3date : 2018.7.27
4goal : 正則表達式
5'''
6
7import re
8
9line = 'jijianXksA123'
10
11# ^a 表示匹配以a開頭的字符串(只匹配一次)
12# . 表示該字符可為任意字符(只匹配一次)
13# * 表示前面的字符可以出現任意次(0次或多次)(多次匹配)
14reg_str01 = '^j.*' # 表示以j開頭的字符串
15# re.match 函數
16# 第一個參數是匹配的格式
17# 第二參數是要匹配的字符串
18# 返回值為:匹配成功,返回match對象,否則返回:None
19
20if re.match(reg_str01,line) :
21 print("匹配成功!") # reg_str = '^j.*' 匹配成功
22else:
23 print("匹配失敗!") # reg_str = '^i.*' 匹配失敗
24
25
26# 23$ 表示匹配以23結尾的字符串(只匹配一次)
27reg_str02 = '^j.*23$'
28if re.match(reg_str02,line) :
29 print("匹配成功!") # reg_str = '^j.*23$' 匹配成功
30else:
31 print("匹配失敗!") # reg_str = '^j.*13$' 匹配失敗
32
33
34line01 = 'boooboaobxby'
35# () 內的為 匹配模式,通過 group函數 可以取出匹配結果
36# 正則表達式貪婪匹配模式:從后面(右邊)開始匹配
37reg_str03 = '.*(b.*b).*'
38test01 = re.match(reg_str03,line01)
39if test01:
40 print(test01.group(1)) # result : bxb
41else:
42 print("匹配失敗!")
43
44# 正則表達式非貪婪匹配模式:從前面(左邊)開始匹配
45# ? : 表示從左邊開始匹配,匹配到第一個符合模式的內容,即進入模式
46#
47reg_str03 = '.*?(b.*b).*' # 半貪婪匹配
48reg_str04 = '.*?(b.*?b).*' # 非貪婪匹配
49test01 = re.match(reg_str03,line01)
50test02 = re.match(reg_str04,line01)
51if test01 and test02:
52 print(test01.group(1)) # result : boooboaobxb
53 print(test02.group(1)) # result : booob
54else:
55 print("匹配失敗!")
day02:
1'''
2author : 極簡XksA
3date : 2018.7.28
4goal : 正則表達式
5'''
6import re
7line01 = 'boooboaobcxby'
8
9def regtest(reg_str,line = line01):
10 test = re.match(reg_str, line)
11 if test:
12 print(test.group(1))
13 else:
14 print("匹配失敗!")
15
16# + :表示前面的字符,至少出現一次
17reg_str04 = '.*(b.+b).*' # (b.+b)表示b與b之間至少有一個字符
18regtest(reg_str04) # result : bcxb
19
20# {n} : 控制前面字符出現次數
21# a{2} : 表示a出現兩次
22# b{3,4} : 表示b至少出現3次,最多出4次
23# c{4,} : 表示c至少出現4次
24reg_str05 = '.*(b.{2}b).*' # (b.{2}b)表示匹配到的b與b之間,只有兩字符
25reg_str06 = '.*(b.{3,4}b).*' # (b.{3,6}b)表示匹配到的b與b之間,至少有3個字符,至多有4個字符
26reg_str07 = '.*(b.{4,}b).*' # (b.{8,}b)表示匹配到的b與b之間,至少有4個字符
27regtest(reg_str05) # result : bcxb
28regtest(reg_str06) # result : boaob
29regtest(reg_str07) # result : boaobcxb
30
31# | :表示 或
32# (abc|123) : 表示匹配到 abc 或者 123,都算匹配成功
33reg_str08 = '.*(boo|abc)'
34reg_str09 = '.*(abc|boo)'
35regtest(reg_str08) # result : boo
36regtest(reg_str09) # result : boo
37
38# [] : 表示 里面包含的內容都可以進行匹配,包含內容只有表面字符含義
39# [abcd] : 表示 只要這個字符為 a/b/c/d中的一個都可以匹配成功
40# [0-9] : 表示 只要這個字符在 0-9 這個區間內,都可以匹配成功
41# [^x] : 表示匹配 字符不為 x
42line02 = '電話號:15573563467'
43reg_str10 = '.*(1[3458][0-9]{9}).*'
44reg_str11 = '.*(1[3458][^1]{9}).*'
45regtest(reg_str10,line02) # result : 15573563467
46regtest(reg_str11,line02) # result : 15573563467
47
48# \s 表示匹配空格,匹配一次
49# \S 表示匹配不是空格的字符,匹配一次
50# \w 表示匹配 A-Z、0-9、_ 中的容易字符,匹配一次
51# \W 與 \w 相反
52# \d 表示數字
53# [\u4E00-\u9FA5] : 表示所有漢字,unicode 編碼
54
55def regtest_test(reg_str,line = line01):
56 test = re.match(reg_str, line)
57 if test:
58 print(test.group(1)+':'+test.group(2)+'-'+test.group(3)+'-'+test.group(4))
59 else:
60 print("匹配失敗!")
61
62# 簡單實例
63str01 = '張三出生于1997年12月20日'
64str02 = '李四出生于1989-01-20'
65str03 = '王五出生于1997/2/5'
66str04 = '趙六出生于1997.12.20'
67str = [str01,str02,str03,str04]
68# 提取出姓名+出生日期
69# 匹配模式
70reg_str12 = '(.*)出生于(\d{4})[.年/-](\d{1,2})[.月/-](\d{1,2}).*?'
71for i in range(4):
72 regtest_test(reg_str12,str[i])
73# result :
74# 張三:1997-12-20
75# 李四:1989-01-20
76# 王五:1997-2-5
77# 趙六:1997-12-20
到此,相信大家對“如何使用Python的正則表達式”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。