<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python正則表達(dá)式

          共 4890字,需瀏覽 10分鐘

           ·

          2022-06-20 21:36

          1. 正則表達(dá)式語(yǔ)法

          1.1 字符與字符類
          1.1.1 特殊字符:.^$?+*{}|
          以上特殊字符要想使用字面值,必須使用進(jìn)行轉(zhuǎn)義
          1.1.2 字符類
          1. 包含在[]中的一個(gè)或者多個(gè)字符被稱為字符類,字符類在匹配時(shí)如果沒(méi)有指定量詞則只會(huì)匹配其中的一個(gè)。
          2. 字符類內(nèi)可以指定范圍,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之間的任何一個(gè)字符
          3. 左方括號(hào)后跟隨一個(gè),表示否定一個(gè)字符類,比如[0-9]表示可以匹配一個(gè)任意非數(shù)字的字符。
          4. 字符類內(nèi)部,除了之外,其他特殊字符不再具備特殊意義,都表示字面值。放在第一個(gè)位置表示否定,放在其他位置表示本身,-放在中間表示范圍,放在字符類中的第一個(gè)字符,則表示-本身。
          5. 字符類內(nèi)部可以使用速記法,比如d s w
          1.1.3 速記法
          .可以匹配除換行符之外的任何字符,如果有re.DOTALL標(biāo)志,則匹配任意字符包括換行
          d匹配一個(gè)Unicode數(shù)字,如果帶re.ASCII,則匹配0-9
          D 匹配Unicode非數(shù)字
          s匹配Unicode空白,如果帶有re.ASCII,則匹配中的一個(gè)
          S 匹配Unicode非空白
          w匹配Unicode單詞字符,如果帶有re.ascii,則匹配[a-zA-Z0-9_]中的一個(gè)
          W 匹配Unicode非單子字符
          1.2 量詞
          1. ?匹配前面的字符0次或1次
          2. *匹配前面的字符0次或多次
          3. +匹配前面的字符1次或者多次
          4. {m}匹配前面表達(dá)式m次
          5. {m,}匹配前面表達(dá)式至少m次
          6. {,n}匹配前面的正則表達(dá)式最多n次
          7. {m,n}匹配前面的正則表達(dá)式至少m次,最多n次
          注意點(diǎn):
          以上量詞都是貪婪模式,會(huì)盡可能多的匹配,如果要改為非貪婪模式,通過(guò)在量詞后面跟隨一個(gè)?來(lái)實(shí)現(xiàn)
          1.3 組與捕獲
          1.3.1 ()的作用:
          1. 捕獲()中正則表達(dá)式的內(nèi)容以備進(jìn)一步利用處理,可以通過(guò)在左括號(hào)后面跟隨?:來(lái)關(guān)閉這個(gè)括號(hào)的捕獲功能
          2. 將正則表達(dá)式的一部分內(nèi)容進(jìn)行組合,以便使用量詞或者|
          1.3.2 反響引用前面()內(nèi)捕獲的內(nèi)容:
          1. 通過(guò)組號(hào)反向引用
          每一個(gè)沒(méi)有使用?:的小括號(hào)都會(huì)分配一個(gè)組好,從1開(kāi)始,從左到右遞增,可以通過(guò)i引用前面()內(nèi)表達(dá)式捕獲的內(nèi)容
          2. 通過(guò)組名反向引用前面小括號(hào)內(nèi)捕獲的內(nèi)容
          可以通過(guò)在左括號(hào)后面跟隨?P<name>,尖括號(hào)中放入組名來(lái)為一個(gè)組起一個(gè)別名,后面通過(guò)(?P=name)來(lái)引用 前面捕獲的內(nèi)容。如(? P<word>w+)s+(?P=word)來(lái)匹配重復(fù)的單詞。
          1.3.3 注意點(diǎn):
          反向引用不能放在字符類[]中使用。
          1.4 斷言與標(biāo)記
          斷言不會(huì)匹配任何文本,只是對(duì)斷言所在的文本施加某些約束
          1.4.1 常用斷言:
          1. 匹配單詞的邊界,放在字符類[]中則表示backspace
          2. B 匹配非單詞邊界,受ASCII標(biāo)記影響
          3. A 在起始處匹配
          4. ^在起始處匹配,如果有MULTILINE標(biāo)志,則在每個(gè)換行符后匹配
          5. Z 在結(jié)尾處匹配
          6. $在結(jié)尾處匹配,如果有MULTILINE標(biāo)志,則在每個(gè)換行符前匹配
          7. (?=e)正前瞻
          8. (?!e)負(fù)前瞻
          9. (?<=e)正回顧
          10.(?<!e)負(fù)回顧
          1.4.2 前瞻回顧的解釋
          前瞻:exp1(?=exp2) exp1后面的內(nèi)容要匹配exp2
          負(fù)前瞻: exp1(?!exp2) exp1后面的內(nèi)容不能匹配exp2
          后顧: (?<=exp2)exp1 exp1前面的內(nèi)容要匹配exp2
          負(fù)后顧: (?<!exp2)exp1 exp1前面的內(nèi)容不能匹配exp2
          例如:我們要查找hello,但是hello后面必須是world,正則表達(dá)式可以這樣寫:"(hello)s+(?=world)",用來(lái)匹配"hello wangxing"和"hello world"只能匹配到后者的hello
          1.5 條件匹配
          (?(id)yes_exp|no_exp):對(duì)應(yīng)id的子表達(dá)式如果匹配到內(nèi)容,則這里匹配yes_exp,否則匹配no_exp
          1.6 正則表達(dá)式的標(biāo)志
          1.6.1. 正則表達(dá)式的標(biāo)志有兩種使用方法
          1. 通過(guò)給compile方法傳入標(biāo)志參數(shù),多個(gè)標(biāo)志使用|分割的方法,如re.compile(r"#[da-f]{6}", re.IGNORECASE|re.MULTILINE)
          2. 通過(guò)在正則表達(dá)式前面添加(?標(biāo)志)的方法給正則表達(dá)式添加標(biāo)志,如(?ms)#[da-z]{6}
          1.6.2. 常用的標(biāo)志
          re.A或者re.ASCII, 使 B s S w W d D都假定字符串為假定字符串為ASCII
          re.I或者re.IGNORECASE使正則表達(dá)式忽略大小寫
          re.M或者re.MULTILINE 多行匹配,使每個(gè)^在每個(gè)回車后,每個(gè)$在每個(gè)回車前匹配
          re.S或者re.DOTALL 使.能匹配任意字符,包括回車
          re.X或者re.VERBOSE 這樣可以在正則表達(dá)式跨越多行,也可以添加注釋,但是空白需要使用s或者[ ]來(lái)表示,因?yàn)槟J(rèn)的空白不再解釋。如:
          re.compile(r"""
          <imgs +)#標(biāo)簽的開(kāi)始
          [^>]*?#不是src的屬性
          src=#src屬性的開(kāi)始
          (?:
          (?P<quote>["'])#左引號(hào)
          (?P<image_name>[^>]+?)#圖片名字
          (?P=quote)#右括號(hào)
          """,re.VERBOSE|re.IGNORECASE)

          2. Python正則表達(dá)式模塊
          2.1 正則表達(dá)式處理字符串主要有四大功能
          1. 匹配 查看一個(gè)字符串是否符合正則表達(dá)式的語(yǔ)法,一般返回true或者false
          2. 獲取正則表達(dá)式來(lái)提取字符串中符合要求的文本
          3. 替換查找字符串中符合正則表達(dá)式的文本,并用相應(yīng)的字符串替換
          4. 分割使用正則表達(dá)式對(duì)字符串進(jìn)行分割。
          2.2 Python中re模塊使用正則表達(dá)式的兩種方法
          1. 使用re.compile(r, f)方法生成正則表達(dá)式對(duì)象,然后調(diào)用正則表達(dá)式對(duì)象的相應(yīng)方法。這種做法的好處是生成正則對(duì)象之后可以多次使用。
          2. re模塊中對(duì)正則表達(dá)式對(duì)象的每個(gè)對(duì)象方法都有一個(gè)對(duì)應(yīng)的模塊方法,唯一不同的是傳入的第一個(gè)參數(shù)是正則表達(dá)式字符串。此種方法適合于只使用一次的正則表達(dá)式。
          2.3 正則表達(dá)式對(duì)象的常用方法
          1. rx.findall(s,start, end):
          返回一個(gè)列表,如果正則表達(dá)式中沒(méi)有分組,則列表中包含的是所有匹配的內(nèi)容,
          如果正則表達(dá)式中有分組,則列表中的每個(gè)元素是一個(gè)元組,元組中包含子分組中匹配到的內(nèi)容,但是沒(méi)有返回整個(gè)正則表達(dá)式匹配的內(nèi)容
          2. rx.finditer(s, start, end):
          返回一個(gè)可迭代對(duì)象
          對(duì)可迭代對(duì)象進(jìn)行迭代,每一次返回一個(gè)匹配對(duì)象,可以調(diào)用匹配對(duì)象的group()方法查看指定組匹配到的內(nèi)容,0表示整個(gè)正則表達(dá)式匹配到的內(nèi)容
          3. rx.search(s, start, end):
          返回一個(gè)匹配對(duì)象,倘若沒(méi)匹配到,就返回None
          search方法只匹配一次就停止,不會(huì)繼續(xù)往后匹配
          4. rx.match(s, start, end):
          如果正則表達(dá)式在字符串的起始處匹配,就返回一個(gè)匹配對(duì)象,否則返回None
          5. rx.sub(x, s, m):
          返回一個(gè)字符串。每一個(gè)匹配的地方用x進(jìn)行替換,返回替換后的字符串,如果指定m,則最多替換m次。對(duì)于x可以使用/i或者/g<id>id可以是組名或者編號(hào)來(lái)引用捕獲到的內(nèi)容。
          模塊方法re.sub(r, x, s, m)中的x可以使用一個(gè)函數(shù)。此時(shí)我們就可以對(duì)捕獲到的內(nèi)容推過(guò)這個(gè)函數(shù)進(jìn)行處理后再替換匹配到的文本。
          6. rx.subn(x, s, m):
          與re.sub()方法相同,區(qū)別在于返回的是二元組,其中一項(xiàng)是結(jié)果字符串,一項(xiàng)是做替換的個(gè)數(shù)。
          7. rx.split(s, m):分割字符串
          返回一個(gè)列表
          用正則表達(dá)式匹配到的內(nèi)容對(duì)字符串進(jìn)行分割
          如果正則表達(dá)式中存在分組,則把分組匹配到的內(nèi)容放在列表中每?jī)蓚€(gè)分割的中間作為列表的一部分,如:
          rx = re.compile(r"(d)[a-z]+(d)")
          s = "ab12dk3klj8jk9jks5"
          result = rx.split(s)
          返回['ab1', '2', '3', 'klj', '8', '9', 'jks5']
          8. rx.flags():正則表達(dá)式編譯時(shí)設(shè)置的標(biāo)志
          9. rx.pattern():正則表達(dá)式編譯時(shí)使用的字符串
          2.4 匹配對(duì)象的屬性與方法
          01. m.group(g, ...)
          返回編號(hào)或者組名匹配到的內(nèi)容,默認(rèn)或者0表示整個(gè)表達(dá)式匹配到的內(nèi)容,如果指定多個(gè),就返回一個(gè)元組
          02. m.groupdict(default)
          返回一個(gè)字典。字典的鍵是所有命名的組的組名,值為命名組捕獲到的內(nèi)容
          如果有default參數(shù),則將其作為那些沒(méi)有參與匹配的組的默認(rèn)值。
          03. m.groups(default)
          返回一個(gè)元組。包含所有捕獲到內(nèi)容的子分組,從1開(kāi)始,如果指定了default值,則這個(gè)值作為那些沒(méi)有捕獲到內(nèi)容的組的值
          04. m.lastgroup()
          匹配到內(nèi)容的編號(hào)最高的捕獲組的名稱,如果沒(méi)有或者沒(méi)有使用名稱則返回None(不常用)
          05. m.lastindex()
          匹配到內(nèi)容的編號(hào)最高的捕獲組的編號(hào),如果沒(méi)有就返回None。
          06. m.start(g):
          當(dāng)前匹配對(duì)象的子分組是從字符串的那個(gè)位置開(kāi)始匹配的,如果當(dāng)前組沒(méi)有參與匹配就返回-1
          07. m.end(g)
          當(dāng)前匹配對(duì)象的子分組是從字符串的那個(gè)位置匹配結(jié)束的,如果當(dāng)前組沒(méi)有參與匹配就返回-1
          08. m.span()
          返回一個(gè)二元組,內(nèi)容分別是m.start(g)和m.end(g)的返回值
          09. m.re()
          產(chǎn)生這一匹配對(duì)象的正則表達(dá)式
          10. m.string()
          傳遞給match或者search用于匹配的字符串
          11. m.pos()
          搜索的起始位置。即字符串的開(kāi)頭,或者start指定的位置(不常用)
          12. m.endpos()
          搜索的結(jié)束位置。即字符串的末尾位置,或者end指定的位置(不常用)
          2.5 總結(jié)
          1. 對(duì)于正則表達(dá)式的匹配功能,Python沒(méi)有返回true和false的方法,但可以通過(guò)對(duì)match或者search方法的返回值是否是None來(lái)判斷
          2. 對(duì)于正則表達(dá)式的搜索功能,如果只搜索一次可以使用search或者match方法返回的匹配對(duì)象得到,對(duì)于搜索多次可以使用finditer方法返回的可迭代對(duì)象來(lái)迭代訪問(wèn)
          3. 對(duì)于正則表達(dá)式的替換功能,可以使用正則表達(dá)式對(duì)象的sub或者subn方法來(lái)實(shí)現(xiàn),也可以通過(guò)re模塊方法sub或者subn來(lái)實(shí)現(xiàn),區(qū)別在于模塊的sub方法的替換文本可以使用一個(gè)函數(shù)來(lái)生成
          4. 對(duì)于正則表達(dá)式的分割功能,可以使用正則表達(dá)式對(duì)象的split方法,需要注意如果正則表達(dá)式對(duì)象有分組的話,分組捕獲的內(nèi)容也會(huì)放到返回的列表中

          *聲明:本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來(lái)源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜。


          我是岳哥,最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識(shí)第二版》《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語(yǔ)法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來(lái)實(shí)操。


          有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)「數(shù)據(jù)前線」(非本號(hào))后臺(tái)回復(fù)關(guān)鍵字:SQL,就行

          數(shù)據(jù)前線
          ——End——

          后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。


          推薦閱讀

          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狠狠狠狠狠狠狠操 | 国产日韩精品无码 | 亚洲爱爱网| 亚洲vo1 | 2021国产精彩在线视频 |