python3爬蟲——正則表示式re詳解(1)
阿新 • • 發佈:2019-01-04
(一)什麼是正則表示式
還早呢過這表示式是對字串操作的一種邏輯公式,就是用實現定義好的一些特定的字元,及這些特定的字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯
ps:正則表示式非python獨有,使用re模組即可實現
(二)案例
re.match
語法格式:re.match(pattern,string,flag=0)
最常規的匹配:
最常規的匹配,表示匹配的結果為最原始的,中規中矩的匹配出結果
程式碼展示:
import re
content = 'Hello 123 4567 World_This is a Regex Demo'
print(len(content))
result = re.match('^Hello\s \d\d\d\s\d{4}\s\w{10}.*Demo$', content)
print(result)
print(result.group())
print(result.span())
知識點:
(1).group()表示的是返回正則匹配的結果
(2).span()表示返回正則匹配的範圍
泛匹配
泛匹配,表示將正則匹配的字元縮短,但得到的是何上方一樣的
結果
程式碼展示:
import re
content = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello.*Demo$', content)
print(result )
print(result.group())
print(result.span())
知識點:
(1) .* 可以匹配出除去換行以外的任意字元
匹配目標
匹配目標就是將需要的字元匹配出來
程式碼展示:
import re
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^Hello\s(\d+)\sWorld.*Demo$', content)
print(result)
print(result.group(1))
print(result.span())
知識點:
(1)()
(2)+ 匹配1個或多個的表示式
* 匹配0個或多個的表示式
(3).group(1)—輸出第一個帶有()的目標
貪婪匹配
在貪婪匹配中匹配出來的結果有可能不是我們想要的結果
import re
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$', content)
print(result)
print(result.group(1))
非貪婪匹配
程式碼展示:
import re
content = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*?(\d+).*Demo$', content)
print(result)
print(result.group(1))
知識點:? 匹配0個或1個由前面的正則表示式定義的片段,為非貪婪方式,匹配儘可能少的字元
匹配模式
當出現換行的時候,.*?*是不適用的,這時
我們需要使用re.s來實現,這樣.*就可以代表換行了
程式碼展示:
import re
content = '''Hello 1234567 World_This
is a Regex Demo
'''
result = re.match('^He.*?(\d+).*?Demo$', content, re.S)
print(result.group(1))
轉義
當有些轉移字元出現在字串中,需要使用’\’來消除他的另外一種含義
程式碼展示:
import re
content = 'price is $5.00'
result = re.match('price is \$5\.00', content)
print(result)
ps:以上均為學習崔慶才python3爬蟲的學習筆記