網(wǎng)站建設(shè)哪家好靈活蘇州久遠網(wǎng)絡(luò)網(wǎng)絡(luò)建站優(yōu)化科技
目錄
- 常見匹配模式
- re.match 從字符串的起始位置匹配一個模式
- 泛匹配
- 匹配目標
- 貪婪匹配
- 非貪婪匹配
- 匹配模式
- 轉(zhuǎn)義
- re.search 掃描整個字符串并返回第一個成功的匹配
- re.findall 以列表形式返回全部能匹配的子串
- re.sub 替換字符串中每一個匹配的子串后返回替換后的字符串
- re.compile 將正則字符串編譯成正則表達式對象
常見匹配模式
模式 | 描述 |
---|---|
\w | 匹配字母數(shù)字及下劃線 |
\W | 匹配非字母數(shù)字下劃線 |
\s | 匹配任意空白字符,等價于 [\t\n\r\f]. |
\S | 匹配任意非空字符 |
\d | 匹配任意數(shù)字,等價于 [0-9] |
\D | 匹配任意非數(shù)字 |
\A | 匹配字符串開始 |
\Z | 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串 |
\z | 匹配字符串結(jié)束 |
\G | 匹配最后匹配完成的位置 |
\n | 匹配一個換行符 |
\t | 匹配一個制表符 |
^ | 匹配字符串的開頭 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。 |
[…] | 用來表示一組字符,單獨列出:[amk] 匹配 ‘a(chǎn)’,‘m’或’k’ |
[^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
* | 匹配0個或多個的表達式。 |
+ | 匹配1個或多個的表達式。 |
? | 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式 |
{n} | 精確匹配n個前面表達式。 |
{n, m} | 匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式 |
a|b | 匹配a或b |
( ) | 匹配括號內(nèi)的表達式,也表示一個組 |
re.match 從字符串的起始位置匹配一個模式
re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none??偨Y(jié):盡量使用泛匹配、使用括號得到匹配目標、盡量使用非貪婪模式、有換行符就用re.S
泛匹配
import recontent = 'Hello 123 4567 World_This is a Regex Demo'
result = re.match('^Hello.*Demo$', content)
print(result)
print(result.group())
print(result.span())<re.Match object; span=(0, 41), match='Hello 123 4567 World_This is a Regex Demo'>
Hello 123 4567 World_This is a Regex Demo
(0, 41)
匹配目標
import recontent = '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())<re.Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
1234567
(0, 40)
貪婪匹配
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*(\d+).*Demo$', content)
print(result)
print(result.group(1))<re.Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
7
非貪婪匹配
import recontent = 'Hello 1234567 World_This is a Regex Demo'
result = re.match('^He.*?(\d+).*Demo$', content)
print(result)
print(result.group(1))<_sre.SRE_Match object; span=(0, 40), match='Hello 1234567 World_This is a Regex Demo'>
1234567
匹配模式
import recontent = '''Hello 1234567 World_This
is a Regex Demo
'''
result = re.match('^He.*?(\d+).*?Demo$', content, re.S) # 可以匹配到換行
print(result.group(1))1234567
轉(zhuǎn)義
import recontent = 'price is $5.00'
result = re.match('price is \$5\.00', content)
print(result)<re.Match object; span=(0, 14), match='price is $5.00'>
re.search 掃描整個字符串并返回第一個成功的匹配
re.search 掃描整個字符串并返回第一個成功的匹配。
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.match('Hello.*?(\d+).*?Demo', content)
print(result) # None# 總結(jié):為匹配方便,能用search就不用match
import re
content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
result = re.search('Hello.*?(\d+).*?Demo', content)
print(result)
print(result.group(1))<_sre.SRE_Match object; span=(13, 53), match='Hello 1234567 World_This is a Regex Demo'>
1234567
re.findall 以列表形式返回全部能匹配的子串
搜索字符串,以列表形式返回全部能匹配的子串。
import rehtml = '''<div id="songs-list"><h2 class="title">經(jīng)典老歌</h2><p class="introduction">經(jīng)典老歌列表</p><ul id="list" class="list-group"><li data-view="2">一路上有你</li><li data-view="7"><a href="/2.mp3" singer="任賢齊">滄海一聲笑</a></li><li data-view="4" class="active"><a href="/3.mp3" singer="齊秦">往事隨風</a></li><li data-view="6"><a href="/4.mp3" singer="beyond">光輝歲月</a></li><li data-view="5"><a href="/5.mp3" singer="陳慧琳">記事本</a></li><li data-view="5"><a href="/6.mp3" singer="鄧麗君">但愿人長久</a></li></ul>
</div>'''
results = re.findall('<li.*?>\s*?(<a.*?>)?(\w+)(</a>)?\s*?</li>', html, re.S)
print(results)
for result in results:print(result[1])[('', '一路上有你', ''), ('<a href="/2.mp3" singer="任賢齊">', '滄海一聲笑', '</a>'), ('<a href="/3.mp3" singer="齊秦">', '往事隨風', '</a>'), ('<a href="/4.mp3" singer="beyond">', '光輝歲月', '</a>'), ('<a href="/5.mp3" singer="陳慧琳">', '記事本', '</a>'), ('<a href="/6.mp3" singer="鄧麗君">', '但愿人長久', '</a>')]
一路上有你
滄海一聲笑
往事隨風
光輝歲月
記事本
但愿人長久
re.sub 替換字符串中每一個匹配的子串后返回替換后的字符串
替換字符串中每一個匹配的子串后返回替換后的字符串。
import recontent = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
content = re.sub('\d+', '', content)
print(content)# Extra stings Hello World_This is a Regex Demo Extra stings
import recontent = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
content = re.sub('(\d+)', r'\1 8910', content)
print(content)# Extra stings Hello 1234567 8910 World_This is a Regex Demo Extra stings
re.compile 將正則字符串編譯成正則表達式對象
將正則字符串編譯成正則表達式對象
import recontent = '''Hello 1234567 World_This
is a Regex Demo'''
pattern = re.compile('Hello.*Demo', re.S)
result = re.match(pattern, content)
#result = re.match('Hello.*Demo', content, re.S)
print(result)# <re.Match object; span=(0, 40), match='Hello 1234567 World_This\nis a Regex Demo'>