1.什么是正則表達式
正則表達式是字符串匹配工具,它是為了在某些需求下可以更方便、更快速的處理字符串
2.怎么使用正則處理字符串
python通過提供re模塊來支持正則表達式
3.怎么寫正則表達式
python中正則表達式是放在字符串中,并且這個字符串一般會在外面加r/R取消python語法的轉譯
4.正則語法
正則字符 | 意義 |
---|---|
普通字符 abc | 匹配對應普通字符 |
. | 匹配任意字符 |
\w | 匹配ASCII中字母數字下劃線,和unicode中除ASCII碼中的內容 |
\s | 匹配一個空白字符 包括空格回車,制表符 |
\d | 匹配一個數字字符 |
\b | 檢測單詞邊界 檢測字符不參與匹配在匹配完成后判斷檢測字符位置是否滿足檢測字符要求 |
^ | 檢測是否是字符串開頭 |
$ | 檢測是否是字符串結尾 |
\大寫字母 | 對小寫字母功能的否定選擇 |
\W | 匹配非數字、字母、下劃線 |
\S | 匹配非空白字符 |
\D | 匹配非數字字符 |
\B | 檢測非單詞邊界 |
字符集[] 匹配[]中任意一個字符
- [] 中可使用 a-b 表示 編碼值從a到b的的所有字符
要求a的編碼值小于b的編碼值,-不在字符中間則值表示字符- - 在[]內容的最前面加^表示否定(除了[]中內容的其他所有內容)
正則表達式 | 意義 |
---|---|
[一-龥] | 所有中文 |
[a-zA-Z] | 所有字母 |
[a-zA-Z\d_] | 數字、字母、下劃線 |
取消特殊符號的轉譯
原理可認為\取消了其后面一個字符的特殊功能
如\\表示一個普通\,\\w則表示普通的\和普通的w
- 在[] 外的情況
特殊意義符號前面加\ 讓其特殊意義消失 - 在中括號里的意義
單獨有特殊意義的符號, 除了^在最前面, - 在兩個字符之間,其余的都失去特殊意義
5.匹配次數
均做用于次數符號前的一個字符或者組
正則符號 | 意義 |
---|---|
* | 匹配0次或者多次 |
+ | 匹配一次或者多次 |
{N} | 匹配N次 |
{M,N} | 匹配M次到N次 |
{M,} | 匹配M次以上 |
{,N} | 匹配N次以上 |
? | 匹配0次或者1次 |
貪婪和非貪婪匹配
- 在匹配次數不確定的情況下默認是貪婪匹配(盡可能多匹配)
- 在匹配次數不確定呢的符號后加? 則變成非貪婪匹配(盡可能少匹配)
6. 分支/選擇 |
- 存在短路匹配現象
如 正則1|正則2|正則3|...
優先使用正則1匹配,如匹配到 則不會進行后面的正則式的匹配,如未匹配到 換 正則2 匹配,依次直到最后一個正則式
7.分組 ()
將小括號中的內容作為一個整體操作 可以在其后使用 \數字 表示重復第幾個括號所匹配的結果,
注意 \數字只能寫在()后, 數字最大只能是前面出現()的個數
8.re模塊方法
1.完全匹配 - 讓字符串長度和字符串每個字符的值和正則表達式完全匹配
- re.fullmatch(正則表達式,字符串)
匹配成功則返回匹配的 Match對象 失敗則返回None
通常用于檢測一個字符串是否合法
Match對象包含多種屬性可通過對應的方法調用
result = re.fullmatch(r'(\d{3})=([a-z]{3})', '234=haj')
print(result)
# 1) 匹配到的內容在原字符串中的位置
print(result.span()) # 整個正則表達式匹配結果的范圍
print(result.span(1)) # 正則表達式中第一個分組匹配結果的范圍
print(result.span(2)) # 正則表達式中第二個分組匹配結果的范圍
print(result.start(2), result.end(2))
# 2) 獲取匹配到的值
print(result.group()) # 整個正則表達式的匹配結果
print(result.group(1))
print(result.group(2))
# 3) 獲取原字符串
print(result.string)
2.match匹配字符串的開頭
re.match(正則表達式, 字符串) - 判斷字符串的開頭是否和正則表達式相匹配。匹配成功返回匹配Match對象,匹配失敗返回None
只檢測字符串從開始的位置是否滿足要求
3.search
re.search(正則表達式, 字符串) - 在字符串中查找是否有和正則表達式匹配的子串, 如果沒有返回None, 如果有就返回第一個匹配的Match對象
4.findall
re.findall(正則表達式, 字符串) - 獲取字符串中所有滿足正則表達式的子串,以列表的形式返回
注意: 正則表達式中有沒有分組
沒有分組 - 整個正則表達式匹配的結果作為列表元素(列表元素是字符串)
有一個分組 - 這個分組匹配到的結果作為列表元素(列表元素是字符串)
多個分組 - 將元祖作為列表元素,每個分組匹配到的結果作為元祖的元素(列表元素是元祖)
5.finditer
re.finditer(正則表達式,字符串) - 獲取子串中所有能夠和正則表達式匹配的子串的匹配結果。
返回值是一個迭代器,迭代器中的元素是匹配Match對象
re方法 | 返回對象 |
---|---|
fullmatch | Match obj |
match | Match obj |
search | Match obj |
findall | list 元素是 匹配的字符串 |
finditer | iter 元素是匹配的 Match obj |
6.split
re.split(正則表達式,字符串) - 將字符串按照滿足正則表達式的子串進行切割
7.sub
re.sub(正則表達式, 新字符串, 字符串, 替換次數) - 將字符串中滿足正則表達式的子串替換成新字符串
替換次數不賦值,表示全部替換