【Python | 邊敲邊學邊記】第一次:正規表示式
一、前言
最近想了很多,和學長學姐、做公眾號認識的一些讀研的、工作的朋友也談了很多,我的疑問是:我到底該做什麼?(面對諸多的不如意、不盡人意),交談思考中也得到了很多結論:
關於公眾號:
1.公眾號要繼續做下去,我的初心是學習分享,不忘初心就好;(每週更新2-3篇學習筆記,以後更注重內容、質量,排班花費再多時間,沒用)
2.在沒學到真正本領前,不會再自己開發雜程式碼的熱點模組,資源分享的學習乾貨模組會持續開發;
3.公眾號以後主要開發的模組:邊學邊敲邊記和學習乾貨;
關於自己:
1.提升自身學習本領,不能再東一棒槌,西一榔頭了,不要浮於表面的虛榮;
2.學Python就堅持走下去,現在儲存的知識不多不少,時間也不多不少,不過還有很多東西沒做,加把勁;
3.8月22日左右出四級成績,看運氣,沒過,好好準備,下次必過;過了,好好準備六級,大三四、六級一定得過,普通話,大三上學期好好練習;
4.考研,這個是躲不掉的,大家都說得很好,把技術學好,畢業出去拿個10-20k工資很簡單,其實有誤區的,自己好好想想“技術學好”的概念是什麼?我們這個行業,10-20k在大城市打拼又算什麼?而且這樣的人,可能一個班就能有2-3個;
5.實訓給我啟發也很大,我不能只做程式設計師,至於做什麼,我還在思考;
6.比較重要的一點:以後儘量少用手機,多買書、看書;
7.考研、創業、課外學習,不衝突,堅持。
上面這些話,也是我開設“邊敲邊學邊記”這個模組的原因; 接下來給大家分享的是前幾天的瞭解正規表示式的學習筆記。
二、正規表示式介紹
1.學習爬蟲,為什麼必須會正規表示式?
有時候,我們爬取一些網頁具體內容時,會發現我們只需要這個網頁某個標籤的一部分內容,或者是這個標籤的某個屬性的值時,用普通的 xpath 或者css.selector是不能實現我們的想法的,這個時候就必須用到正規表示式去匹配獲取。
2.正規表示式官方簡介?
正規表示式,又稱規則表示式。(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。正規表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。
三、看程式碼,邊學邊敲邊記正規表示式
day01:
1
'''
2
author : 極簡XksA
3
date : 2018.7.27
4
goal : 正規表示式
5
'''
6
7
import
re
8
9
line =
'jijianXksA123'
10
11
# ^a 表示匹配以a開頭的字串(只匹配一次)
12
# . 表示該字元可為任意字元(只匹配一次)
13
# * 表示前面的字元可以出現任意次(0次或多次)(多次匹配)
14
reg_str01 =
'^j.*'
# 表示以j開頭的字串
15
# re.match 函式
16
# 第一個引數是匹配的格式
17
# 第二引數是要匹配的字串
18
# 返回值為:匹配成功,返回match物件,否則返回:None
19
20
if
re.match(reg_str01,line) :
21
print(
"匹配成功!"
)
# reg_str = '^j.*' 匹配成功
22
else
:
23
print(
"匹配失敗!"
)
# reg_str = '^i.*' 匹配失敗
24
25
26
# 23$ 表示匹配以23結尾的字串(只匹配一次)
27
reg_str02 =
'^j.*23$'
28
if
re.match(reg_str02,line) :
29
print(
"匹配成功!"
)
# reg_str = '^j.*23$' 匹配成功
30
else
:
31
print(
"匹配失敗!"
)
# reg_str = '^j.*13$' 匹配失敗
32
33
34
line01 =
'boooboaobxby'
35
# () 內的為 匹配模式,透過 group函式 可以取出匹配結果
36
# 正規表示式貪婪匹配模式:從後面(右邊)開始匹配
37
reg_str03 =
'.*(b.*b).*'
38
test01 = re.match(reg_str03,line01)
39
if
test01:
40
print(test01.group(
1
))
# result : bxb
41
else
:
42
print(
"匹配失敗!"
)
43
44
# 正規表示式非貪婪匹配模式:從前面(左邊)開始匹配
45
# ? : 表示從左邊開始匹配,匹配到第一個符合模式的內容,即進入模式
46
#
47
reg_str03 =
'.*?(b.*b).*'
# 半貪婪匹配
48
reg_str04 =
'.*?(b.*?b).*'
# 非貪婪匹配
49
test01 = re.match(reg_str03,line01)
50
test02 = re.match(reg_str04,line01)
51
if
test01
and
test02:
52
print(test01.group(
1
))
# result : boooboaobxb
53
print(test02.group(
1
))
# result : booob
54
else
:
55
print(
"匹配失敗!"
)
day02:
1
'''
2
author : 極簡XksA
3
date : 2018.7.28
4
goal : 正規表示式
5
'''
6
import
re
7
line01 =
'boooboaobcxby'
8
9
def
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
# + :表示前面的字元,至少出現一次
17
reg_str04 =
'.*(b.+b).*'
# (b.+b)表示b與b之間至少有一個字元
18
regtest(reg_str04)
# result : bcxb
19
20
# {n} : 控制前面字元出現次數
21
# a{2} : 表示a出現兩次
22
# b{3,4} : 表示b至少出現3次,最多出4次
23
# c{4,} : 表示c至少出現4次
24
reg_str05 =
'.*(b.{2}b).*'
# (b.{2}b)表示匹配到的b與b之間,只有兩字元
25
reg_str06 =
'.*(b.{3,4}b).*'
# (b.{3,6}b)表示匹配到的b與b之間,至少有3個字元,至多有4個字元
26
reg_str07 =
'.*(b.{4,}b).*'
# (b.{8,}b)表示匹配到的b與b之間,至少有4個字元
27
regtest(reg_str05)
# result : bcxb
28
regtest(reg_str06)
# result : boaob
29
regtest(reg_str07)
# result : boaobcxb
30
31
# | :表示 或
32
# (abc|123) : 表示匹配到 abc 或者 123,都算匹配成功
33
reg_str08 =
'.*(boo|abc)'
34
reg_str09 =
'.*(abc|boo)'
35
regtest(reg_str08)
# result : boo
36
regtest(reg_str09)
# result : boo
37
38
# [] : 表示 裡面包含的內容都可以進行匹配,包含內容只有表面字元含義
39
# [abcd] : 表示 只要這個字元為 a/b/c/d中的一個都可以匹配成功
40
# [0-9] : 表示 只要這個字元在 0-9 這個區間內,都可以匹配成功
41
# [^x] : 表示匹配 字元不為 x
42
line02 =
'電話號:15573563467'
43
reg_str10 =
'.*(1[3458][0-9]{9}).*'
44
reg_str11 =
'.*(1[3458][^1]{9}).*'
45
regtest(reg_str10,line02)
# result : 15573563467
46
regtest(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
55
def
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
# 簡單例項
63
str01 =
'張三出生於1997年12月20日'
64
str02 =
'李四出生於1989-01-20'
65
str03 =
'王五出生於1997/2/5'
66
str04 =
'趙六出生於1997.12.20'
67
str = [str01,str02,str03,str04]
68
# 提取出姓名+出生日期
69
# 匹配模式
70
reg_str12 =
'(.*)出生於(\d{4})[.年/-](\d{1,2})[.月/-](\d{1,2}).*?'
71
for
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
四、後言
邊敲邊學邊做,堅持學習分享。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556503/viewspace-2216248/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Python | 邊學邊敲邊記】第三次:URL去重策略Python
- 【Python | 邊學邊敲邊記】第四次:初識爬蟲框架ScrapyPython爬蟲框架
- 【Python | 邊學邊敲邊記】第二次:深度&&廣度優先演算法Python演算法
- 正規表示式刪除字串兩邊的空格字串
- iOS 邊學邊記iOS
- Go 邊看邊練 - 《Go 學習筆記》系列Go筆記
- 邊學邊玩CSS GridCSS
- 機器學習實戰-邊學邊讀python程式碼(5)機器學習Python
- 機器學習實戰-邊學邊讀python程式碼(4)機器學習Python
- Python學習筆記 - 正規表示式Python筆記
- 邊走邊瞧!累呀!(IT小記)
- Akka邊學邊寫(2)-- Echo ServerServer
- python去除圖片白邊黑邊Python
- [轉]Go 邊看邊練 -《Go 學習筆記》系列(一)Go筆記
- 正兒八經學iOS系列 - AVPlayer實現流音訊邊播邊存iOS音訊
- Python下正規表示式學習筆記Python筆記
- Python學習筆記|Python之正規表示式Python筆記
- 正規表示式學習筆記筆記
- 斜邊樣式
- python 中的正規表示式學習筆記Python筆記
- Elasticsearch 邊讀邊譯Elasticsearch
- ASP.NET CORE 邊學邊記之 SwaggerUI簡單配置ASP.NETSwaggerUI
- 邊下載邊播放的播放器Android邊下邊播播放器Android
- python筆記(2) 正規表示式Python筆記
- [邊學邊練]用簡單例項學習React單例React
- 聽技術播客:一邊學Python程式設計一邊學英語Python程式設計
- 邊學邊做的第一個Unity小遊戲Unity遊戲
- Innov8-邊玩遊戲,邊學業務流程管理遊戲
- Ruby學習筆記-正規表示式筆記
- 正規表示式學習筆記一筆記
- PERL學習筆記---正規表示式筆記
- 正規表示式學習筆記 (轉)筆記
- Python——正規表示式Python
- Python 正規表示式Python
- Python:正規表示式Python
- python正規表示式Python
- 邊學邊寫——母函式及其在中學數學競賽中的運用(一)函式
- 在風變程式設計學習Python,找到了邊玩邊學的樂趣程式設計Python