Python基础(十一)--正则表达式
? ? ? ? ? ? ? ? ? ? ? ? ? ? Python基礎(chǔ)(十一)--正則表達式
1 簡述
正則表達式可以對指定的字符串與模式之間執(zhí)行模式匹配。模式可以是普通的字符串,也可以是含有特殊意義字符的字符串。通過正則表達式,我們可以進行查找,校驗等。
2 特殊字符
2.1 字符相關(guān)
下表字符匹配內(nèi)容匹配單個字符。\?在Python中是轉(zhuǎn)義的開始,在正則表達式中也是轉(zhuǎn)義的開始。如果模式使用原始字符串,可以減少轉(zhuǎn)義的繁瑣性。
| 字符 | 說明 | 
| . | 默認模式下,匹配除換行符(\n)之外的所有單個字符。在S(DOTALL)模式下,匹配所有單個字符。 | 
| [字符] | 匹配[]內(nèi)的任意一個字符。[]中可以是單個字符,如[x9k],也可以是一個字符區(qū)間,如[a-k],[3-5]。如果需要匹配“-”,可以使用“\-”轉(zhuǎn)義,或者將該字符置于[]的兩端,如[-axk]或[axk-]。如果需要匹配“]”,可以使用“\]”轉(zhuǎn)義,或者將該字符置于[]的最前端,如[]axk]。 | 
| [^字符] | 匹配不在[]內(nèi)的任意一個字符,[]的取反匹配。 | 
| \d | 如果是str類型,匹配Unicode十進制數(shù)字,這包括但不限于0?~ 9,例如0,?等字符,也能夠匹配成功。如果是bytes類型,匹配[0-9]。 | 
| \D | 匹配非Unicode數(shù)字字符,\d的取反匹配。 | 
| \s | 如果是str類型,匹配Unicode空白符,這包括但不限于[空格\t\v\r\n\f]。如果是bytes類型,匹配[空格\t\v\r\n\f]。 | 
| \S | 匹配非Unicode空白字符,\s的取反匹配。 | 
| \w | 如果是str類型,匹配Unicode單詞字符,這包括但不限于[a-zA-Z0-9_]。如果是bytes類型,則匹配[a-zA-Z0-9_]。 | 
| \W | 匹配非Unicode單詞字符,\w的取反匹配。 | 
| \ | 轉(zhuǎn)義字符,對正則表達式的特殊字符進行轉(zhuǎn)義,例如,如果要匹配普通的“.”字符,則可以使用“\.”。 | 
?
2.2 次數(shù)相關(guān)
| 字符 | 說明 | 
| * | 匹配前面的字符0次或多次。 | 
| + | 匹配前面的字符1次或多次。 | 
| ? | 匹配前面的字符0次或1次。 | 
| {m} | 匹配前面的字符m次。 | 
| {m,} | 匹配前面的字符至少m次。 | 
| {,n} | 匹配前面的字符至多n次。 | 
| {m,n} | 匹配前面的字符m到n次。 | 
| X? | X表示以上的任意一種模式({m}除外),即在對應(yīng)的模式字符串后面加上一個問號?,表示該模式的非貪婪模式(否則為貪婪模式)。貪婪模式與非貪婪模式的區(qū)別在于:貪婪模式會盡可能匹配最多的字符,而非貪婪模式會盡可能匹配最少的字符。 | 
?
2.3 邊界相關(guān)
| 字符 | 說明 | 
| ^ | 匹配字符串的開頭。在多行模式下,可以匹配每一行的開頭。 | 
| $ | 匹配字符串的結(jié)尾。在多行模式下,可以匹配每一行的末尾。 | 
| \A | 僅匹配字符串的開頭。 | 
| \Z | 僅匹配字符串的末尾。 | 
| \b | 匹配單詞的邊界。單詞可以含有Unicode字符、數(shù)字與下劃線組成(\w+匹配的內(nèi)容)。\b匹配的是空串,該空串可以出現(xiàn)在\w(\W)與\W(\w)之間、字符串開頭與\w之間或\w與字符串結(jié)尾之間。 | 
| \B | 匹配單詞的非邊界。\B匹配的是空串,該空串必須出現(xiàn)在兩個\w之間。\B是\b的取反匹配。 | 
?
2.4 組相關(guān)
| 字符 | 說明 | 
| () | 對()內(nèi)的字符進行分組。分組后,該組匹配的內(nèi)容可以單獨提取,同時,也可以在模式字符串后面使用\number進行引用。 | 
| \number | number用來指定組序號,序號從1開始。用來匹配number對應(yīng)的分組內(nèi)容。 | 
| (?:表達式) | 匹配()內(nèi)的字符,但是不會進行分組。()內(nèi)匹配的內(nèi)容也無法單獨提取,或者在后面使用\number引用。 | 
| (?P<name>表達式) | 對()內(nèi)的字符進行分組,組名為name,多個組之間的名稱不能重復(fù)。分組后,該組匹配的內(nèi)容可以單獨提取,同時,也可以在模式字符串后面使用(?P=name)或\number進行引用。對比之前()進行的序號分組,此種方式可以稱為命名分組。不過,命名分組依然也可以使用序號(\number)進行引用。 | 
| (?P=name) | 用來匹配同名的分組內(nèi)容【之前使用(?P<name>)進行的分組】。 | 
| | | 用來連接兩個并列的模式字符串,匹配其中的一個即可。 | 
?
2.5 控制標記
re模塊正則表達式的第三個參數(shù)flag的使用。(3.6后,使用RegexFlag對象)
I(IGNORECASE):忽略大小寫
M(MULTILINE):匹配所有的字符
S(DOTALL):多行模式
?
3 相關(guān)屬性和方法
3.1 re模塊的函數(shù)
re模塊提供的函數(shù)功能search,match等,使用re.compile編譯后返回的正則表達式也提供相應(yīng)的功能,他們的區(qū)別為:①重復(fù)使用同一個模式進行匹配不同目標。使用正則表達式對象編譯后,會提高一定的性能因為不需要對同一個模式進行重復(fù)編譯。②使用正則表達式對象訪問方法時,可以指定開始與結(jié)束區(qū)間,re無此功能
| 函數(shù) | 描述 | 
| re.compile() | 參數(shù)1:模式,參數(shù)2:控制標記。根據(jù)參數(shù)提供的模式與控制標記,編譯返回一個正則表達式對象 | 
| re.search() | 使用正則表達式對象進行匹配查找 | 
| re.match | 與search功能相同,僅能從頭部進行進行查找 | 
| re.findall() | 查找所有匹配內(nèi)容,返回一個列表 | 
| re.finditer() | 返回所有匹配的內(nèi)容,返回一個迭代器,迭代器中的每一個對象是match對象(正則表達式匹配的對象) | 
| re.split() | 參數(shù)1:切割模式,參數(shù)2:待切割的字符串,參數(shù)3:最大切割次數(shù) | 
| re.sub() | 參數(shù)1:替換的模式(要替換的內(nèi)容),參數(shù)2:替換后的內(nèi)容,參數(shù)3:待搜索的字符串,參數(shù)4:最大替換次數(shù)。參數(shù)5;控制標記。返回替換之后的內(nèi)容 | 
?
3.2 正則表達式對象
正則表達式匹配之后,會返回一個match對象,具有的屬性方法如下:
| 屬性 | 描述 | 
| string | 待匹配的文本 | 
| re | 匹配時使用的patter對象(正則表達式) | 
| pos | 搜索文本的開始位置 | 
| endpos | 搜索文本的結(jié)束位置 | 
| 方法 | 描述 | 
| group() | 獲得匹配后的字符串 | 
| groups() | 返回一個元組,元組中的元素為所有分組的匹配結(jié)果 | 
| start() | 匹配字符串在原始字符串的開始位置 | 
| end() | 匹配字符串在原始字符串的結(jié)束位置 | 
| span() | 返回(.start(), .end()) | 
?
總結(jié)
以上是生活随笔為你收集整理的Python基础(十一)--正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 鸿蒙系统笔记本价格,鸿蒙系统手机华为P5
- 下一篇: 计算机进入休眠状态后,Win7电脑进入休
