最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python正則表達(dá)式知識匯總

 更新時(shí)間:2017年09月22日 08:33:57   作者:GreatAnt  
本文介紹了Python正則表達(dá)式的相關(guān)基礎(chǔ)知識,本文的內(nèi)容不包括如何編寫高效的正則表達(dá)式、如何優(yōu)化正則表達(dá)式,這些主題請查看其他教程。

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

  1.1 字符與字符類
     1 特殊字符:\.^$?+*{}[]()|
      以上特殊字符要想使用字面值,必須使用\進(jìn)行轉(zhuǎn)義
     2 字符類
         1. 包含在[]中的一個(gè)或者多個(gè)字符被稱為字符類,字符類在匹配時(shí)如果沒有指定量詞則只會匹配其中的一個(gè)。
       2. 字符類內(nèi)可以指定范圍,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之間的任何一個(gè)字符
       3. 左方括號后跟隨一個(gè)^,表示否定一個(gè)字符類,比如[^0-9]表示可以匹配一個(gè)任意非數(shù)字的字符。
       4. 字符類內(nèi)部,除了\之外,其他特殊字符不再具備特殊意義,都表示字面值。^放在第一個(gè)位置表示否定,放在其他位置表示^本身,-放在中間表示范圍,放在字符類中的第一個(gè)字符,則表示-本身。

      5. 字符類內(nèi)部可以使用速記法,比如\d \s \w
    3 速記法
       . 可以匹配除換行符之外的任何字符,如果有re.DOTALL標(biāo)志,則匹配任意字符包括換行
       \d 匹配一個(gè)Unicode數(shù)字,如果帶re.ASCII,則匹配0-9
      \D 匹配Unicode非數(shù)字
       \s 匹配Unicode空白,如果帶有re.ASCII,則匹配\t\n\r\f\v中的一個(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):
       以上量詞都是貪婪模式,會盡可能多的匹配,如果要改為非貪婪模式,通過在量詞后面跟隨一個(gè)?來實(shí)現(xiàn)

  1.3 組與捕獲
     1 ()的作用:
       1. 捕獲()中正則表達(dá)式的內(nèi)容以備進(jìn)一步利用處理,可以通過在左括號后面跟隨?:來關(guān)閉這個(gè)括號的捕獲功能
      2. 將正則表達(dá)式的一部分內(nèi)容進(jìn)行組合,以便使用量詞或者|
    2 反響引用前面()內(nèi)捕獲的內(nèi)容:
       1. 通過組號反向引用
         每一個(gè)沒有使用?:的小括號都會分配一個(gè)組好,從1開始,從左到右遞增,可以通過\i引用前面()內(nèi)表達(dá)式捕獲的內(nèi)容
       2. 通過組名反向引用前面小括號內(nèi)捕獲的內(nèi)容
         可以通過在左括號后面跟隨?P<name>,尖括號中放入組名來為一個(gè)組起一個(gè)別名,后面通過(?P=name)來引用 前面捕獲的內(nèi)容。如(? P<word>\w+)\s+(?P=word)來匹配重復(fù)的單詞。
     3 注意點(diǎn):
       反向引用不能放在字符類[]中使用。

   1.4 斷言與標(biāo)記
     斷言不會匹配任何文本,只是對斷言所在的文本施加某些約束
     1 常用斷言:
       1. \b 匹配單詞的邊界,放在字符類[]中則表示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ù)回顧
     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)",用來匹配"hello wangxing"和"hello world"只能匹配到后者的hello

  1.5 條件匹配
     (?(id)yes_exp|no_exp):對應(yīng)id的子表達(dá)式如果匹配到內(nèi)容,則這里匹配yes_exp,否則匹配no_exp

  1.6 正則表達(dá)式的標(biāo)志
     1. 正則表達(dá)式的標(biāo)志有兩種使用方法
       1. 通過給compile方法傳入標(biāo)志參數(shù),多個(gè)標(biāo)志使用|分割的方法,如re.compile(r"#[\da-f]{6}\b", re.IGNORECASE|re.MULTILINE)
      2. 通過在正則表達(dá)式前面添加(?標(biāo)志)的方法給正則表達(dá)式添加標(biāo)志,如(?ms)#[\da-z]{6}\b
    2. 常用的標(biāo)志
       re.A或者re.ASCII, 使\b \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或者[ ]來表示,因?yàn)槟J(rèn)的空白不再解釋。如:
         re.compile(r"""
          <img\s +) #標(biāo)簽的開始
           [^>]*? #不是src的屬性
           src= #src屬性的開始
           (?:
          (?P<quote>["']) #左引號
           (?P<image_name>[^\1>]+?) #圖片名字
           (?P=quote) #右括號
           """,re.VERBOSE|re.IGNORECASE)

2. Python正則表達(dá)式模塊

   2.1 正則表達(dá)式處理字符串主要有四大功能

     1. 匹配 查看一個(gè)字符串是否符合正則表達(dá)式的語法,一般返回true或者false
    2. 獲取 正則表達(dá)式來提取字符串中符合要求的文本
     3. 替換 查找字符串中符合正則表達(dá)式的文本,并用相應(yīng)的字符串替換
     4. 分割 使用正則表達(dá)式對字符串進(jìn)行分割。

   2.2 Python中re模塊使用正則表達(dá)式的兩種方法

     1. 使用re.compile(r, f)方法生成正則表達(dá)式對象,然后調(diào)用正則表達(dá)式對象的相應(yīng)方法。這種做法的好處是生成正則對象之后可以多次使用。
     2. re模塊中對正則表達(dá)式對象的每個(gè)對象方法都有一個(gè)對應(yīng)的模塊方法,唯一不同的是傳入的第一個(gè)參數(shù)是正則表達(dá)式字符串。此種方法適合于只使用一次的正則表達(dá)式。

   2.3 正則表達(dá)式對象的常用方法

     1. rx.findall(s,start, end):
      返回一個(gè)列表,如果正則表達(dá)式中沒有分組,則列表中包含的是所有匹配的內(nèi)容,
       如果正則表達(dá)式中有分組,則列表中的每個(gè)元素是一個(gè)元組,元組中包含子分組中匹配到的內(nèi)容,但是沒有返回整個(gè)正則表達(dá)式匹配的內(nèi)容
     2. rx.finditer(s, start, end):
      返回一個(gè)可迭代對象
       對可迭代對象進(jìn)行迭代,每一次返回一個(gè)匹配對象,可以調(diào)用匹配對象的group()方法查看指定組匹配到的內(nèi)容,0表示整個(gè)正則表達(dá)式匹配到的內(nèi)容
     3. rx.search(s, start, end):
      返回一個(gè)匹配對象,倘若沒匹配到,就返回None
      search方法只匹配一次就停止,不會繼續(xù)往后匹配
     4. rx.match(s, start, end):
      如果正則表達(dá)式在字符串的起始處匹配,就返回一個(gè)匹配對象,否則返回None
    5. rx.sub(x, s, m):
      返回一個(gè)字符串。每一個(gè)匹配的地方用x進(jìn)行替換,返回替換后的字符串,如果指定m,則最多替換m次。對于x可以使用/i或者/g<id>id可以是組名或者編號來引用捕獲到的內(nèi)容。
       模塊方法re.sub(r, x, s, m)中的x可以使用一個(gè)函數(shù)。此時(shí)我們就可以對捕獲到的內(nèi)容推過這個(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)容對字符串進(jìn)行分割
       如果正則表達(dá)式中存在分組,則把分組匹配到的內(nèi)容放在列表中每兩個(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 匹配對象的屬性與方法

    01. m.group(g, ...)
      返回編號或者組名匹配到的內(nèi)容,默認(rèn)或者0表示整個(gè)表達(dá)式匹配到的內(nèi)容,如果指定多個(gè),就返回一個(gè)元組
     02. m.groupdict(default)
      返回一個(gè)字典。字典的鍵是所有命名的組的組名,值為命名組捕獲到的內(nèi)容
       如果有default參數(shù),則將其作為那些沒有參與匹配的組的默認(rèn)值。
     03. m.groups(default)
      返回一個(gè)元組。包含所有捕獲到內(nèi)容的子分組,從1開始,如果指定了default值,則這個(gè)值作為那些沒有捕獲到內(nèi)容的組的值
     04. m.lastgroup()
      匹配到內(nèi)容的編號最高的捕獲組的名稱,如果沒有或者沒有使用名稱則返回None(不常用)
    05. m.lastindex()
      匹配到內(nèi)容的編號最高的捕獲組的編號,如果沒有就返回None。
     06. m.start(g):
      當(dāng)前匹配對象的子分組是從字符串的那個(gè)位置開始匹配的,如果當(dāng)前組沒有參與匹配就返回-1
    07. m.end(g)
      當(dāng)前匹配對象的子分組是從字符串的那個(gè)位置匹配結(jié)束的,如果當(dāng)前組沒有參與匹配就返回-1
    08. m.span()
      返回一個(gè)二元組,內(nèi)容分別是m.start(g)和m.end(g)的返回值
     09. m.re()
      產(chǎn)生這一匹配對象的正則表達(dá)式
     10. m.string()
      傳遞給match或者search用于匹配的字符串
     11. m.pos()
      搜索的起始位置。即字符串的開頭,或者start指定的位置(不常用)
    12. m.endpos()
      搜索的結(jié)束位置。即字符串的末尾位置,或者end指定的位置(不常用)

  2.5 總結(jié)

     1. 對于正則表達(dá)式的匹配功能,Python沒有返回true和false的方法,但可以通過對match或者search方法的返回值是否是None來判斷
     2. 對于正則表達(dá)式的搜索功能,如果只搜索一次可以使用search或者match方法返回的匹配對象得到,對于搜索多次可以使用finditer方法返回的可迭代對象來迭代訪問
     3. 對于正則表達(dá)式的替換功能,可以使用正則表達(dá)式對象的sub或者subn方法來實(shí)現(xiàn),也可以通過re模塊方法sub或者subn來實(shí)現(xiàn),區(qū)別在于模塊的sub方法的替換文本可以使用一個(gè)函數(shù)來生成
     4. 對于正則表達(dá)式的分割功能,可以使用正則表達(dá)式對象的split方法,需要注意如果正則表達(dá)式對象有分組的話,分組捕獲的內(nèi)容也會放到返回的列表中

相關(guān)文章

  • pandas?dataframe獲取所有行名稱與列名稱方法示例

    pandas?dataframe獲取所有行名稱與列名稱方法示例

    這篇文章主要給大家介紹了關(guān)于pandas?dataframe獲取所有行名稱與列名稱的相關(guān)資料,Pandas是Python中用于數(shù)據(jù)分析的非常重要的庫,它提供了多種方法來獲取列名,需要的朋友可以參考下
    2023-09-09
  • Python爬蟲和反爬技術(shù)過程詳解

    Python爬蟲和反爬技術(shù)過程詳解

    Python爬蟲是當(dāng)下最火的一種獲取數(shù)據(jù)的方式,當(dāng)我們對一些小型網(wǎng)站進(jìn)行爬取的時(shí)候往往沒什么阻礙,而當(dāng)我們爬取大型網(wǎng)站的時(shí)候經(jīng)常會遇到禁止訪問、封禁IP的情況,這也是我們觸發(fā)反爬機(jī)制的體現(xiàn),本文來帶領(lǐng)大家了解幾種簡單高效的反爬對策
    2021-09-09
  • 教你用Python寫一個(gè)植物大戰(zhàn)僵尸小游戲

    教你用Python寫一個(gè)植物大戰(zhàn)僵尸小游戲

    這篇文章主要介紹了教你用Python寫一個(gè)植物大戰(zhàn)僵尸小游戲,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python使用CRC實(shí)現(xiàn)圖片去重

    Python使用CRC實(shí)現(xiàn)圖片去重

    這篇文章主要為大家詳細(xì)介紹了Python如何使用CRC實(shí)現(xiàn)圖片去重功能,文中的示例代碼講解詳細(xì),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 使用Python爬了4400條淘寶商品數(shù)據(jù),竟發(fā)現(xiàn)了這些“潛規(guī)則”

    使用Python爬了4400條淘寶商品數(shù)據(jù),竟發(fā)現(xiàn)了這些“潛規(guī)則”

    這篇文章主要介紹了使用Python爬了4400條淘寶商品數(shù)據(jù),竟發(fā)現(xiàn)了這些“潛規(guī)則”,筆者用 Python 爬取淘寶某商品的全過程,并對商品數(shù)據(jù)進(jìn)行了挖掘與分析,最終得出結(jié)論。需要的朋友可以參考下
    2018-03-03
  • Python使用py2exe打包程序介紹

    Python使用py2exe打包程序介紹

    這篇文章主要介紹了Python使用py2exe打包程序介紹,本文講解了py2exe簡介、安裝、用法、指定額外文件等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • Python PaddlePaddle機(jī)器學(xué)習(xí)之求解線性模型

    Python PaddlePaddle機(jī)器學(xué)習(xí)之求解線性模型

    這篇文章主要介紹了Python PaddlePaddle機(jī)器學(xué)習(xí)之求解線性模型,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Python讀取Excel表格,并同時(shí)畫折線圖和柱狀圖的方法

    Python讀取Excel表格,并同時(shí)畫折線圖和柱狀圖的方法

    今天小編就為大家分享一篇Python讀取Excel表格,并同時(shí)畫折線圖和柱狀圖的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python從csv文件中讀取數(shù)據(jù)及提取數(shù)據(jù)的方法

    Python從csv文件中讀取數(shù)據(jù)及提取數(shù)據(jù)的方法

    這篇文章主要介紹了Python從csv文件中讀取數(shù)據(jù)并提取數(shù)據(jù)的方法,文中通過多種方法給大家講解獲取指定列的數(shù)據(jù),并存入一個(gè)數(shù)組中,每種方法通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-11-11
  • vscode和Anaconda安裝以及相關(guān)環(huán)境配置指南

    vscode和Anaconda安裝以及相關(guān)環(huán)境配置指南

    Anaconda是一個(gè)開源的python發(fā)行版本,是現(xiàn)在比較流行的python數(shù)據(jù)科學(xué)平臺,可以對python的科學(xué)包做到有效管理,這篇文章主要給大家介紹了關(guān)于vscode和Anaconda安裝以及相關(guān)環(huán)境配置指南的相關(guān)資料,需要的朋友可以參考下
    2023-11-11

最新評論

黎川县| 成武县| 岳普湖县| 应用必备| 金昌市| 瑞金市| 石门县| 政和县| 阿坝县| 达州市| 滦南县| 双峰县| 西城区| 略阳县| 南靖县| 宁远县| 乡宁县| 麦盖提县| 阿鲁科尔沁旗| 沈丘县| 榆社县| 年辖:市辖区| 卢氏县| 西林县| 名山县| 石门县| 垦利县| 玉环县| 天长市| 龙南县| 礼泉县| 洛阳市| 钟祥市| 冷水江市| 临海市| 景谷| 黑水县| 建平县| 嵩明县| 南溪县| 马鞍山市|