python正则表达式,看完这篇文章就够了...
正則的噩夢...
正則表達式這東西,你說它簡單它也簡單,你說它難吧,確實不容易。為什么?這東西就是死記硬背的。背過了相關的語法,使用起來就so easy。但記不熟語法,就犯難了。網上關于python正則的帖子很多,我再去寫壓力比較大,盡可能的總結詳細一些吧!
正則表達式簡介
正則表達式,是一個特殊的字符序列,又稱規則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp 或RE),本質而言是一種小型的,高度專業化的編程語言。
Python 自1.5版本起增加了re 模塊,re 模塊使Python語言擁有全部的正則表達式功能。
正則語法表
關于正則語法表,別想其他的都背過就行了。不管你是python還是其他的語言都是一樣的,所以背不過就抄到記住為止!這個你背不過,再好的教程看了也沒用。如何巧記?我們需要對其進行分類。
開頭結尾
這一對標簽,大家都不會陌生…
| ^ | 從整個字符串開頭的地方匹配 |
| $ | 從整個字符串的結尾開始匹配 |
模糊匹配
| . | 匹配任意字符,除了換行符 |
| re? | 重復匹配?號前面0個或1個由前面的正則表達式定義的片段,非貪婪方式 |
| re* | 重復匹配*號前面0個或多個的表達式。 |
| re+ | 重復匹配+號前面1個或多個的表達式。 |
| a丨b | 匹配a或b |
關于括號
| {} | 表示匹配"{}"前邊的字符 指定個數為"{}"里邊的數值 |
| [] | 表示一個字符集,它常被用來指定一個字符類別,字符可以單個列出,也可以用“-”號分隔的兩個給定字符來表示一個字符區間 |
| () | 分組 將括號中的內容 當作整體來對待 |
"\" 反斜杠的應用
| \w | 匹配字母數字及下劃線 |
| \W | 匹配非字母數字及下劃線 |
| \s | 匹配任意空白字符,等價于 [\t\n\r\f]. |
| \S | 匹配任意非空字符 |
| \d | 匹配任意數字,等價于 [0-9]. |
| \D | 匹配任意非數字 |
| \A | 匹配字符串開始 |
| \Z | 匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。 |
| \z | 匹配字符串結束 |
| \G | 匹配最后匹配完成的位置。 |
| \b | 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 |
| \B | 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 |
| \n, \t, 等. | 匹配一個換行符。匹配一個制表符。等 |
| \1…\9 | 匹配第n個分組的內容。 |
| \10 | 匹配第n個分組的內容,如果它經匹配。否則指的是八進制字符碼的表達式。 |
其他
| (?imx) | 正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區域。 |
| (?-imx) | 正則表達式關閉 i, m, 或 x 可選標志。只影響括號中的區域。 |
| (?: re) | 類似 (…), 但是不表示一個組 |
| (?imx: re) | 在括號中使用i, m, 或 x 可選標志 |
| (?-imx: re) | 在括號中不使用i, m, 或 x 可選標志 |
| (?#…) | 注釋. |
| (?= re) | 前向肯定界定符。如果所含正則表達式,以 … 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。 |
| (?! re) | 前向否定界定符。與肯定界定符相反;當所含表達式不能在字符串當前位置匹配時成功 |
| (?> re) | 匹配的獨立模式,省去回溯。 |
re模塊用法
re.(function)(pattern[, flags])
pattern : 一個字符串形式的正則表達式
flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為:
re.I 忽略大小寫
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環境
re.M 多行模式
re.S 即為 . 并且包括換行符在內的任意字符(. 不包括換行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數據庫
re.X 為了增加可讀性,忽略空格和 # 后面的注釋
findall() (即:全部找到,返回的是一個列表)
findall(string[, pos[, endpos]])
參數:
string : 待匹配的字符串。
pos : 可選參數,指定字符串的起始位置,默認為 0。
endpos : 可選參數,指定字符串的結束位置,默認為字符串的長度。
finditer()
和 findall 類似,在字符串中找到正則表達式所匹配的所有子串,并把它們作為一個迭代器返回。
re.finditer(pattern, string, flags=0)
參數:
| pattern | 匹配的正則表達式 |
| string | 要匹配的字符串。 |
| flags | 標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等 |
search() 與 match()
相同點:
語法:re.search/match(pattern, string, flags=0)
函數參數說明:
| pattern | 匹配的正則表達式 |
| string | 要匹配的字符串。 |
| flags | 標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等 |
可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
| group(num=0) | 匹配的整個表達式的字符串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組 |
| groups() | 返回一個包含所有小組字符串的元組,從 1 到 所含的小組號 |
| start([group]) | 方法用于獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引),參數默認值為 0 |
| end([group]) | 方法用于獲取分組匹配的子串在整個字符串中的結束位置(子串最后一個字符的索引+1),參數默認值為 0 |
| span([group]) | 方法返回 (start(group), end(group) |
不同點:
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None
re.search匹配整個字符串,直到找到一個匹配
split() 分隔符 對比字符串里邊的split方法。
split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
| pattern | 匹配的正則表達式 |
| string | 要匹配的字符串。 |
| maxsplit | 分隔次數,maxsplit=1 分隔一次,默認為 0,不限制次數。 |
| flags | 標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。參見:正則表達式修飾符 - 可選標志 |
sub() 替換;類似字符串中的replace()方法。
re.sub用于替換字符串中的匹配項。
語法:
re.sub(pattern, repl, string, count=0, flags=0)
參數:
pattern : 正則中的模式字符串。
repl : 替換的字符串,也可為一個函數。
string : 要被查找替換的原始字符串。
count : 模式匹配后替換的最大次數,默認 0 表示替換所有的匹配。
compile(strPattern[,flag]): 這個方法是Pattern類的工廠方法,用于將字符串形式的正則表達式編譯為Pattern對象
compile 函數用于編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。
語法格式為:
re.compile(pattern[, flags])
參數:
pattern : 一個字符串形式的正則表達式
flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為:
re.I 忽略大小寫
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環境
re.M 多行模式
re.S 即為 . 并且包括換行符在內的任意字符(. 不包括換行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數據庫
re.X 為了增加可讀性,忽略空格和 # 后面的注釋
總結
以上是生活随笔為你收集整理的python正则表达式,看完这篇文章就够了...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 史上最全python字符串操作指南
- 下一篇: AI基础:Python开发环境设置和小技