正則表達式(re)
一、特殊符號
"""
引入正則表達式:進行模糊匹配
*:匹配0 ~ ∞次;貪婪匹配
在*後加?(*?)設置爲惰性匹配,按最小次數匹配
.:通配符
?:匹配0 ~ 1次
+:匹配1 ~ ∞次;貪婪匹配
在+後加?(+?)設置爲惰性匹配,按最小次數匹配
^:從頭匹配
$:從尾匹配
{}:自定義匹配次數
():
?: : 取消分組優先級
[]:字符集 其中選擇一個匹配,取消元字符的特殊功能(\ ^ - 例外)
[0-9], [a-z], [A-Z]
[^t]:表示除了t以外的所有字符,表示取反
\:反斜槓後面跟元字符去除其特殊功能,後面跟普通字符實現特殊功能
\d = [0-9]
\D = [^0-9]
\s = [ \t\r\n\f\v]
\S = [^ \t\r\n\f\v]
\w = [a-zA-Z0-9]
\W = [^ a-zA-Z0-9]
\b: 匹配一個特殊字符的邊界,也就是指單詞和空格間的文職
| :或
re.findall(pattern, string) 找出所有符合規則的字符
re.finditer(pattern, string) 返回一個迭代器
re.search(pattern, string) 返回匹配到的第一個對象,可以用group()方法返回結果
re.match() 旨在字符串開始匹配,返回匹配到的第一個對象,可以用group()方法返回結果
re.split(pattern, string, maxsplit, flags) 按規則分隔字符串
re.sub(pattern, repl, string, count): 替換
re.subn() : 替換,會返回替換了多少次
re.compile(pattern) # 將規則編譯成一個對象方便多次使用
"""
二、re方法
import re
ret = re.findall("o[qwl]f", 'wolf') # 選擇[]中的一個匹配,
print(ret)
[‘olf’]
ret = re.findall('[w,*,,,.]', 'wwolf*,.') # 取消元字符的特殊功能
print(ret)
[‘w’, ‘w’, ‘*’, ‘,’, ‘.’]
ret = re.search('[\d]', '213213') # 匹配出滿足條件的第一個結果
print(ret)
print(ret.group())
<re.Match object; span=(0, 1), match=‘2’>
2
ret = re.search('a\+', 'a+d2')
print(ret.group())
a+
ret = re.findall(r'2\\\*c', 'dw2\*c') # 在表達式前加r取消元字符特殊功能
print(ret)
[‘2\*c’]
# ?P<id>分組命名
ret = re.search('(?P<id>\d{3})/(?P<name>wo[l,w]f)', 'asd212/wolf')
print(ret.group('id'))
print(ret.group('name'))
212
wolf
ret = re.split('s|a|\d', 'wdfsdwfadwef2w') # 按s、a、數字將字符串分成列表
print(ret)
ret = re.split('[j,s]', 'sdjksal') # 先按j分,分開之後的組在分別用s分
print(ret)
[‘wdf’, ‘dwf’, ‘dwef’, ‘w’]
[’’, ‘d’, ‘k’, ‘al’]
ret = re.sub('\d', 'w', '21e12er123r', 3) # 將字符串中對應的字符串替換(old_str, new_str, origin_str, count, flags)
print(ret)
wwew2er123r
p = re.compile('\.com') # 將匹配表達式單獨列出
str1 = 'wdawd.com2dasd.com'
ret = re.findall(p, str1)
print(ret)
[’.com’, ‘.com’]
ret = re.findall('www.(?:baidu).com', 'www.baidu.com') # 匹配括號中的表達式
print(ret)
[‘www.baidu.com’]
ret = re.finditer('\d', '2da2') # 匹配結果爲匹配到的對象迭代器,用next取出,
print(next(ret).group())
print(next(ret).group())
2
2