python的正則表達(dá)式

最近經(jīng)常會(huì)碰到正則表達(dá)式,以前雖然也會(huì)寫一些,也能夠看懂,但畢竟沒(méi)有系統(tǒng)的研究過(guò),用的時(shí)候還是需要常常google。
趁這個(gè)機(jī)會(huì),進(jìn)行總結(jié)和筆記,希望以后查資料就看自己的文章就夠了,不用到處google。

作用

正則表達(dá)式的作用,在于描述一類字符串,常用于匹配和檢索。
正則表達(dá)式不是萬(wàn)能的,并不能匹配全部的字符串,看名字就知道,還有非正則字符串。

常用語(yǔ)法

預(yù)定義字符 含義
\d 數(shù)字:[0-9]
\D 非數(shù)字:[^\d]
\s 空白字符:[<空格>\t\r\n\f\v]
\S 非空白字符:[^\s]
\w 單詞字符:[A-Za-z0-9]
\W 非單詞字符:[^\w]
普通字符 含義
. 匹配任意換行符"\n"外的字符
abc 匹配字符本身
特殊字符 匹配特殊字符,前面加\匹配
數(shù)量字符 含義
* 匹配前一個(gè)字符0或無(wú)限次
+ 匹配前一個(gè)字符1或無(wú)限次
? 匹配前一個(gè)字符0或1次
{m,n} 匹配前一個(gè)字符m到n次,m和n可省略
{m,n}?、*?等 非貪婪模式,數(shù)量字符都是貪婪的,它們會(huì)盡可能多的匹配文字,在它們的后面加上一個(gè)?就可以實(shí)現(xiàn)非貪婪或最小匹配匹配特殊字符
分組 含義
[] 字符集,表示對(duì)應(yīng)位置可以是字符集中任意字符
| 或,表示左右表達(dá)式任意匹配一個(gè),匹配時(shí)短路
() 分組,從左邊開(kāi)始,我一個(gè)分組,編號(hào)+1
\<number> 引用編號(hào)為<number>的分組

python的re模塊

在python中引用re模塊即可在python中使用正則表達(dá)式import re

正則對(duì)象

re模塊中,需要把一個(gè)正則字符串轉(zhuǎn)換成正則表達(dá)式對(duì)象,然后使用該對(duì)象去執(zhí)行匹配和替換等操作。
使用pattern = re.compile(r're_string')把一個(gè)正則字符串re_string轉(zhuǎn)換成正則對(duì)象pattern,在這里建議使用python中的原字符串模式r'...'填入字符串,可以避免很多轉(zhuǎn)義問(wèn)題。
有兩個(gè)常用的對(duì)象屬性,pattern. patternpattern.groups,分別輸出對(duì)象的匹配字符和分組個(gè)數(shù)。

匹配對(duì)象

在執(zhí)行中,如果不想創(chuàng)建一個(gè)pattern,則可以直接使用match = re.match(r're_string','string') 來(lái)匹配。
返回值match就是正則的匹配對(duì)象,若沒(méi)有匹配,返回None
match也有很多屬性和方法,比較常用的有

屬性:

  • string: 匹配時(shí)使用的文本。
  • re: 匹配時(shí)使用的Pattern對(duì)象。
  • pos: 文本中正則表達(dá)式開(kāi)始搜索的索引。值與Pattern.match()和 Pattern.seach()方法的同名參數(shù)相同。
  • endpos: 文本中正則表達(dá)式結(jié)束搜索的索引。值與Pattern.match()和Pattern.seach()方法的同名參數(shù)相同。
  • lastindex: 最后一個(gè)被捕獲的分組在文本中的索引。如果沒(méi)有被捕獲的分組,將為None。
  • lastgroup: 最后一個(gè)被捕獲的分組的別名。如果這個(gè)分組沒(méi)有別名或者沒(méi)有被捕獲的分組,將為None。

方法:

  • group([group1, …]):
    獲得一個(gè)或多個(gè)分組截獲的字符串;指定多個(gè)參數(shù)時(shí)將以元組形式返回。group1可以使用編號(hào)也可以使用別名;編號(hào)0代表整個(gè)匹配的子串;不填寫參數(shù)時(shí),返回group(0);沒(méi)有截獲字符串的組返回None;截獲了多次的組返回最后一次截獲的子串。
  • groups([default]):
    以元組形式返回全部分組截獲的字符串。相當(dāng)于調(diào)用group(1,2,…last)。default表示沒(méi)有截獲字符串的組以這個(gè)值替代,默認(rèn)為None。
  • groupdict([default]):
    返回以有別名的組的別名為鍵、以該組截獲的子串為值的字典,沒(méi)有別名的組不包含在內(nèi)。default含義同上。
  • start([group]):
    返回指定的組截獲的子串在string中的起始索引(子串第一個(gè)字符的索引)。group默認(rèn)值為0。
  • end([group]):
    返回指定的組截獲的子串在string中的結(jié)束索引(子串最后一個(gè)字符的索引+1)。group默認(rèn)值為0。
  • span([group]):
    返回(start(group), end(group))。
  • expand(template):
    將匹配到的分組代入template中然后返回。template中可以使用\id或\g<id>、\g<name>引用分組,但不能使用編號(hào)0。\id與\g<id>是等價(jià)的;但\10將被認(rèn)為是第10個(gè)分組,如果你想表達(dá)\1之后是字符'0',只能使用\g<1>0。
re的常用方法
  • match(string[, pos[, endpos]]) | re.match(pattern, string[, flags])
    從頭匹配pattern,若匹配不到,則返回None
  • search(string[, pos[, endpos]]) | re.search(pattern, string[, flags]):
    從字符串所有位置匹配pattern,若匹配不到,則返回None
  • split(string[, maxsplit]) | re.split(pattern, string[, maxsplit])
    按照能夠匹配的子串將string分割后返回列表。maxsplit用于指定最大分割次數(shù),不指定將全部分割。
  • findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags])
    搜索string,以列表形式返回全部能匹配的子串。
  • finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]):
    搜索string,返回一個(gè)順序訪問(wèn)每一個(gè)匹配結(jié)果(Match對(duì)象)的迭代器。
  • sub(repl, string[, count]) | re.sub(pattern, repl, string[, count])
    使用repl替換string中每一個(gè)匹配的子串后返回替換后的字符串。
    當(dāng)repl是一個(gè)字符串時(shí),可以使用\id或\g<id>、\g<name>引用分組,但不能使用編號(hào)0。
    當(dāng)repl是一個(gè)方法時(shí),這個(gè)方法應(yīng)當(dāng)只接受一個(gè)參數(shù)(Match對(duì)象),并返回一個(gè)字符串用于替換(返回的字符串中不能再引用分組)。
    count用于指定最多替換次數(shù),不指定時(shí)全部替換。
  • subn(repl, string[, count]) |re.sub(pattern, repl, string[, count]):
    返回 (sub(repl, string[, count]), 替換次數(shù))。

參考了csnd博文,引用部分還沒(méi)有消化成自己的東西,在日常使用中,應(yīng)該用不到這么多的屬性和方法,以后再做刪減。先寫到這。。。


點(diǎn)到即止

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容