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

python演示解答正則為什么是最強(qiáng)文本處理工具

 更新時(shí)間:2021年09月16日 16:44:08   作者:派森攻城獅  
正則表達(dá)式又稱規(guī)則表達(dá)式,通常被用來(lái)檢索、替換那些符合某個(gè)模式(規(guī)則)的文本,它是最強(qiáng)的文本處理工具,至于原因本文將給你答案

正則表達(dá)式,又稱規(guī)則表達(dá)式。(英語(yǔ):Regular Expression,在代碼中常簡(jiǎn)寫為regex、regexp或RE),計(jì)算機(jī)科學(xué)的一個(gè)概念。正則表達(dá)式通常被用來(lái)檢索、替換那些符合某個(gè)模式(規(guī)則)的文本。

Python作為一門數(shù)據(jù)處理語(yǔ)言,經(jīng)常使用正則匹配段落,比如爬蟲爬取數(shù)據(jù)時(shí)。正則表達(dá)式是Python內(nèi)置的模塊,不需要額外安裝。

在這里插入圖片描述

今天來(lái)給大家分享一份比較全面的Python正則表達(dá)式寶典,學(xué)會(huì)之后,你將掌握正則表達(dá)式的各種應(yīng)用場(chǎng)景。

re模塊

re (Regular Expression簡(jiǎn)寫),這個(gè)很好記住。

1.導(dǎo)入re模塊

在使用正則表達(dá)式之前,需要導(dǎo)入re模塊。

import re

2.findall()的語(yǔ)法:

導(dǎo)入了re模塊之后就可以使用findall()方法了,
re.findall(pattern, string, flags=0)

參數(shù)

pattern:必填。正則表達(dá)式
string:必填,需要檢索的文本, == 確保沒亂碼 ==
Flags:選填,功能標(biāo)志位

返回?cái)?shù)組

str='a1a2a3'
newStr=re.findall('a\d',str )
nullVlue=re.findall('b\d',str)
print('newStr匹配個(gè)數(shù):',len(newStr))
print('newStr匹配結(jié)果',newStr)
print('nullVlue匹配個(gè)數(shù):',len(nullVlue))
print('nullVlue匹配結(jié)果',nullVlue)

顯示如下:

newStr匹配個(gè)數(shù): 3
newStr匹配結(jié)果 ['a1', 'a2', 'a3']
nullVlue匹配個(gè)數(shù): 0
nullVlue匹配結(jié)果 []

基本語(yǔ)法已經(jīng)介紹完成了。

正則表達(dá)式

1.傻瓜式截取findall

import re

text='aaa bbb ccc'

rol='aaa (.*) ccc'

rul=re.findall(rol ,text)

print(rul)

顯示如下:

['bbb']

直接復(fù)制原來(lái)的文本,把想要提取的文本替換成(.*)

在這里插入圖片描述

表達(dá)式解釋:

表示 意義
(pattern) 表示匹配pattern并獲取這一匹配。要匹配圓括號(hào)字符,請(qǐng)使用""。
. 匹配除“\n"之外的任何單個(gè)字符。要匹配包括"\n"在內(nèi)的任何字符,請(qǐng)使用像"(.|\n)"的模式。
* 匹配前面的子表達(dá)式零次或多次。例如,zo*能匹配“z"以及"zoo"。*等價(jià)于{0,}。

增加替代

import re

text = '<li><a href="/2/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >動(dòng)作片</a></li> <li><a href="/1/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >喜劇片</a></li>'

rol = r'<li><a href=".*?" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >(.*?)</a></li>'

rul = re.findall(rol, text)

print(rul)

顯示:

['動(dòng)作片', '喜劇片']

表達(dá)式解釋:

在這里插入圖片描述

表示 意義
? 非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。
pattern 不帶( )表示匹配pattern匹配值不獲取~~獲取值不輸出~~。

保留獲取

import re

text = '<li><a href="/2/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >動(dòng)作片</a></li> <li><a href="/1/" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >喜劇片</a></li>'

role = r'<li><a href=".*?" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >(.*?)</a></li>'

resu = re.findall(role , text)

rol2=r'(<a href=".*?" rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >.*?</a>)'

rul2 = re.findall(rol2, text)

print(resu )

顯示:

['<a href="/2/">動(dòng)作片</a>', '<a href="/1/">喜劇片</a>']

把括號(hào)寫在外面就可以了

傻瓜式的講完了,下面講講限定符

1 - [xyz]

字符集合。匹配所包含的任意一個(gè)字符。例如,“[abc]“可以匹配"plain"中的"a”。

import re

text = 'aab 1+23 ss aac 4-56 ss'

rol = r'aa(.*?)ss'

rul1 = re.findall(rol, text)

print(rul1)

rol2 = r'aa[bc](.*?)ss'

rul1 = re.findall(rol2, text)

print(rul1)


輸出:

['b 1+23 ', 'c 4-56 ']
[' 1+23 ', ' 4-56 ']

== 表達(dá)式解釋 ==
①我們可以先把固定的截取下來(lái),紅框部分。
②再通過(guò)非截取方式把b和c過(guò)濾掉,藍(lán)色部分。
③[ ]提供的就是包含功能

在這里插入圖片描述

2 - {}

表示 意義
{n} n是一個(gè)非負(fù)整數(shù)。匹配確定的n次。例如,“o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的兩個(gè)o。
{n,} n是一個(gè)非負(fù)整數(shù)。至少匹配n次。例如,“o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等價(jià)于"o+"。"o{0,}"則等價(jià)于"o*"。
{n,m} m和n均為非負(fù)整數(shù),其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}"將匹配"fooooood"中的前三個(gè)o。"o{0,1}"等價(jià)于"o?"。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。
+ 匹配前面的子表達(dá)式一次或多次。例如,“zo+"能匹配"zo"以及"zoo",但不能匹配"z"。+等價(jià)于{1,}。。
* 匹配前面的子表達(dá)式零次或多次。例如,zo*能匹配“z"以及"zoo"。*等價(jià)于{0,}。

== 難度加大,b和c的個(gè)數(shù)不固定 ==

import re
#難度加大,b和c的個(gè)數(shù)不固定
text = 'aabbccbb 1+23 ss aaccb 4-56 ss'

rol = r'aa[bc]{3,10}(.*?)ss'

rul1 = re.findall(rol, text)

print(rul1)

rol2 = r'aa[bc](.*?)ss'

rul2 = re.findall(rol2, text)

print(rul2)


顯示:

[' 1+23 ', ' 4-56 ']
['bccbb 1+23 ', 'cb 4-56 ']

在這里插入圖片描述

3 - (?:pattern)正則斷言

斷言(Assertions)在正則表達(dá)式概念里面難理解,它通常指的是在目標(biāo)字符串的當(dāng)前匹配位置進(jìn)行的一種測(cè)試但這種測(cè)試并不占用目標(biāo)字符串,也即不會(huì)移動(dòng)模式在目標(biāo)字符串中的當(dāng)前匹配位置。

表示 意義
x|y 匹配x或y。例如,“z|food"能匹配"z"或"food"。"(z|f)ood"則匹配"zood"或"food"。
(?:pattern) 匹配pattern但不獲取匹配結(jié)果,也就是說(shuō)這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用或字符“(|)"來(lái)組合一個(gè)模式的各個(gè)部分是很有用。
(?=pattern) 正向肯定預(yù)查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。
(?!pattern) 正向否定預(yù)查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。
(?!pattern) 正向否定預(yù)查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。
(?<=pattern) 反向肯定預(yù)查,與正向肯定預(yù)查類擬,只是方向相反。
(?<!pattern) 反向否定預(yù)查,與正向否定預(yù)查類擬,只是方向相反。

== 再把開頭字符變得不固定aa和dd,結(jié)尾字符ss,ff ==

import re
#難度加大,b和c的個(gè)數(shù)不固定
#再把開頭字符變得不固定aa和dd,結(jié)尾字符ss,ff
text = 'aabbccbb 1+23 ss ddccb 4-56 ff'

rol = r'aa[bc]{3,10}(.*?)ss'

rul1 = re.findall(rol, text)

print(rul1)

rol2 = r'(?:aa|dd)[bc]{3,10}(.*?)(?:ss|ff)'

rul2 = re.findall(rol2, text)

print(rul2)

顯示:

[' 1+23 ']
[' 1+23 ', ' 4-56 ']

在這里插入圖片描述

Python正則flags

編譯標(biāo)志讓你可以修改正則表達(dá)式的一些運(yùn)行方式。多個(gè)標(biāo)志可以通過(guò)按位 OR-ing 它們來(lái)指定。如 re.I | re.M 。flags都有兩種形式,縮寫和全寫都可以。

表示 意義
re.I或re.IGNORECASE 忽略大小寫
re.L或re.LOCALE 使用當(dāng)?shù)豯ocale。(python中有個(gè)locale模塊,locale代表不同的語(yǔ)言,地區(qū)和字符集)
re.U或re.UNICODE 使用unicode的locale
re.U或re.UNICODE 使用unicode的locale
re.M或re.MULTILINE 使用^或$時(shí)會(huì)匹配每一行的行首或行尾
re.S或re.DOTALL 使用.時(shí)能匹配換行符
re.X或re.VERBOX 忽略空白字符,而且可以加入注釋

re.I

import re
#難度加大,b和c的個(gè)數(shù)不固定
#再把開頭字符變得不固定aa和dd,結(jié)尾字符ss,ff
#改變字母大小寫
text = 'aAbBCcbb 1+23 Ss Ddccb 4-56 fF'

rol = r'(?:aa|dd)[bc]{3,10}(.*?)(?:ss|ff)'

rul = re.findall(rol, text)
print(rul)

rul2 = re.findall(rol, text,re.I)
print(rul2)



顯示:

[]
[' 1+23 ', ' 4-56 ']

在這里插入圖片描述

re.M和re.S

import re
#難度加大,b和c的個(gè)數(shù)不固定
#再把開頭字符變得不固定aa和dd,結(jié)尾字符ss,ff
#改變字母大小寫
#在中間添加一個(gè)換行符
text = 'aAbBCcbb 1+23 \n Ss Ddccb 4-56 fF'

rol = r'(?:aa|dd)[bc]{3,10}(.*?)(?:ss|ff)'

rul = re.findall(rol, text,re.I)
print(rul)

rul2 = re.findall(rol, text,re.I|re.S)
print(rul2)

顯示:

[' 4-56 ']
[' 1+23 \n ', ' 4-56 ']

在這里插入圖片描述

== 結(jié)果說(shuō)明 ==
①默認(rèn)re.M只會(huì)匹配在當(dāng)前 行(非列) 里面進(jìn)行匹配,“Ss”已經(jīng)換行了,所以“1+23”沒有匹配到。
②re.S表示匹配多行,并且捕獲換行符
③re.S|re.I可以并行使用

# 結(jié)語(yǔ) 正則的匹配方法,已經(jīng)寫完了,號(hào)稱萬(wàn)能的文本處理工具,下篇開始講解,替換,追加。最后最后,感謝大家關(guān)注!

到此這篇關(guān)于python演示解答正則為什么是最強(qiáng)文本處理工具的文章就介紹到這了,更多相關(guān)python 正則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python打印十行楊輝三角過(guò)程詳解

    使用python打印十行楊輝三角過(guò)程詳解

    這篇文章主要介紹了使用python打印十行楊輝三角過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python新手學(xué)習(xí)函數(shù)默認(rèn)參數(shù)設(shè)置

    Python新手學(xué)習(xí)函數(shù)默認(rèn)參數(shù)設(shè)置

    在本篇文章里小編給大家分享的是關(guān)于Python新手學(xué)習(xí)函數(shù)默認(rèn)參數(shù)設(shè)置的相關(guān)知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-06-06
  • pandas值替換方法

    pandas值替換方法

    今天小編就為大家分享一篇pandas值替換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python文件絕對(duì)路徑寫法介紹(windows)

    python文件絕對(duì)路徑寫法介紹(windows)

    今天小編就為大家分享一篇python文件絕對(duì)路徑寫法介紹(windows),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python取出字典中的值的實(shí)現(xiàn)

    Python取出字典中的值的實(shí)現(xiàn)

    本文主要介紹了Python取出字典中的值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 利用python解決mysql視圖導(dǎo)入導(dǎo)出依賴的問(wèn)題

    利用python解決mysql視圖導(dǎo)入導(dǎo)出依賴的問(wèn)題

    這篇文章主要給大家介紹了關(guān)于利用python解決mysql視圖導(dǎo)入導(dǎo)出依賴的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • python3讀取csv文件任意行列代碼實(shí)例

    python3讀取csv文件任意行列代碼實(shí)例

    這篇文章主要介紹了python3讀取csv文件任意行列代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • python爬蟲---requests庫(kù)的用法詳解

    python爬蟲---requests庫(kù)的用法詳解

    requests是python實(shí)現(xiàn)的簡(jiǎn)單易用的HTTP庫(kù),使用起來(lái)比urllib簡(jiǎn)潔很多,這里就為大家分享一下
    2020-09-09
  • python人工智能tensorflow函數(shù)tf.layers.dense使用方法

    python人工智能tensorflow函數(shù)tf.layers.dense使用方法

    這篇文章主要介紹了python人工智能tensorflow函數(shù)tf.layers.dense的使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • pycharm運(yùn)行出現(xiàn)ImportError:No module named的解決方法

    pycharm運(yùn)行出現(xiàn)ImportError:No module named的解決方法

    今天小編就為大家分享一篇pycharm運(yùn)行出現(xiàn)ImportError:No module named的解決方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10

最新評(píng)論

突泉县| 江城| 琼结县| 襄垣县| 浦城县| 龙口市| 瑞丽市| 江都市| 来凤县| 南汇区| 平原县| 灵山县| 道真| 南城县| 江达县| 大港区| 虹口区| 桓台县| 筠连县| 文化| 长兴县| 正定县| 东乡族自治县| 花垣县| 高青县| 长白| 临泽县| 堆龙德庆县| 长治市| 社会| 长垣县| 尤溪县| 开化县| 台东市| 岳池县| 灵台县| 肇东市| 香港| 五莲县| 尚志市| 于都县|