欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python正則表達(dá)式以及常用匹配實(shí)例

 更新時(shí)間:2022年07月27日 09:06:17   作者:Sicc1107  
在處理字符串時(shí),經(jīng)常會(huì)遇到查找符合某些復(fù)雜規(guī)則字符串的需求,正則表達(dá)式就是用于描述這些規(guī)則的工具,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式以及常用匹配的相關(guān)資料,需要的朋友可以參考下

1 正則表達(dá)式對(duì)象

re.RegexObject

re.compile() 返回 RegexObject 對(duì)象。

re.MatchObject

group() 返回被 RE 匹配的字符串。

  • start() 返回匹配開(kāi)始的位置
  • end() 返回匹配結(jié)束的位置
  • span() 返回一個(gè)元組包含匹配 (開(kāi)始,結(jié)束) 的位置

2 正則表達(dá)式修飾符 - 可選標(biāo)志

re.I 大小寫(xiě)不敏感

re.L 做本地化識(shí)別(locale-aware)匹配

re.M 多行匹配,影響 ^ 和 $

re.S 使 . 匹配包括換行在內(nèi)的所有字符

re.U 根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B.

re.X 該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫(xiě)得更易于理解。

3 正則表達(dá)式字符意義

符號(hào)含義
^以什么開(kāi)頭
$以什么結(jié)尾
.匹配任意字符,除了換行符
[…]用來(lái)表示一組字符,單獨(dú)列出:[amk] 匹配 ‘a’,‘m’或’k’
[^…]取反
*匹配0個(gè)或多個(gè)
+匹配1個(gè)或多個(gè)
?匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段
{n}{ n}
{n,}精確匹配 n+ 個(gè)
{n,m}精確匹配 n 到m個(gè)
a|ba或b
()標(biāo)記 組合
\w匹配字母數(shù)字及下劃線,等價(jià)于 ‘[A-Za-z0-9_]’
\W匹配非字母數(shù)字及下劃線,等價(jià)于’[^A-Za-z0-9_]
\s匹配任意空白字符,等價(jià)于 [ \f\n\r\t\v]。
\S匹配任意非空字符 [^ \f\n\r\t\v]
\d匹配任意數(shù)字,等價(jià)于 [0-9].
\D匹配任意非數(shù)字,等價(jià)于 [^0-9]。
\A匹配字符串開(kāi)始
\Z匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。
\z匹配字符串結(jié)束
\G匹配最后匹配完成的位置。
\b單詞邊界
\B非單詞邊界

組合使用

[ab]cde匹配 acde 或 bcde
abc[de]匹配 abcd 或 abce
[abcdef]匹配中括號(hào)內(nèi)的任意一個(gè)字母
[0-9]匹配任何數(shù)字。類似于 [0123456789]
[a-z]匹配任何小寫(xiě)字母
[A-Z]匹配任何大寫(xiě)字母
[a-zA-Z0-9]匹配任何字母及數(shù)字
[^0-9]取反 匹配數(shù)字之外
.*任意一個(gè)字符 出現(xiàn)0次或多次 盡可能多的匹配
.*?只匹配符合條件的最少字符 盡可能少的匹配

re.match函數(shù)

re.match 嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match()就返回none。

re.match(pattern, string, flags=0)

pattern 匹配的正則表達(dá)式 string 要匹配的字符串。 flags 標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。

import re
#在起始位置匹配  匹配 www 是不是在開(kāi)頭
print(re.match('www', 'www.aaa.com'))          # <re.Match object; span=(0, 3), match='www'>
print(re.match('www', 'www.aaa.com').span())   # (0, 3)
print(re.match('com', 'www.bbb.com'))          # None


line = "wo shi ni baba oo aa"
#最后的 .*就是后面所有的   re.M 多行匹配,影響 ^ 和 $     re.I 大小寫(xiě)不敏感
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
    print("matchObj.group() : ", matchObj.group())     #返回匹配到的整個(gè)表達(dá)式的字符串
    print("matchObj.group(1) : ", matchObj.group(1))   #返回標(biāo)記的1個(gè)() (.*)就是任意字符出現(xiàn)0個(gè)或多個(gè) 在這就是 wo
    print("matchObj.group(2) : ", matchObj.group(2))   #返回標(biāo)記的2個(gè)() (.*?) 只匹配符合條件的最少字符 和.*是差不多的 就是 ni
else:
    print("No match!!")

#matchObj.group() :  wo shi ni baba oo aa
#matchObj.group(1) :  wo
#matchObj.group(2) :  ni

re.search方法

re.search 掃描整個(gè)字符串并返回第一個(gè)成功的匹配。

re.search(pattern, string, flags=0)

print(re.search('ab', 'www.abcdef.com').span())  # (4, 6)
print(re.search('cc', 'www.abcdef.ccom').span()) # (11, 13)

替換re.sub

re.sub用于替換字符串中的匹配項(xiàng)。

re.sub(pattern, repl, string, count=0, flags=0)

pattern : 正則中的模式字符串。rep : 替換內(nèi)容,也可為一個(gè)函數(shù)。 string : 要被查找替換的原始字符串。count : 模式匹配后替換的最大次數(shù),默認(rèn) 0 表示替換所有的匹配。

num1 = "a11a-b22b-c33c-d44d-e55e #sdsdasdas111da"
# re.sub(pattern, repl, string, count=0, flags=0)
##刪除#號(hào)之后的   將#號(hào)之后的所有 替換為空
num2 = re.sub(r'#.*$', "", num1)     
print(num2)                               #a11a-b22b-c33c-d44d-e55e
#  #\D 匹配任意非數(shù)字  替換為空
num3 = re.sub(r'\D', "", num1)          
print(num3)                               #1122334455111

def test(x):
    print(x)
    y = int(x.group())
    y *= 2
    return str(y)
# 內(nèi)部調(diào)用test方法時(shí) 會(huì)把 匹配到的 數(shù)據(jù)以 re.Match的格式傳遞
print(re.sub(r'\d+', test, p))

re.compile 函數(shù)

函數(shù)用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式( Pattern )對(duì)象,供 match() 和 search() 這兩個(gè)函數(shù)使用。

re.compile(pattern,[flags])

pattern : 一個(gè)字符串形式的正則表達(dá)式 flags : 可選,表示匹配模式,比如忽略大小寫(xiě),多行模式等

pattern = re.compile(r'([a-z]+) ([a-z]+) (.*)', re.I)
str1 = pattern.match('Wo shi ni Ba ba')
print(str1)              #<re.Match object; span=(0, 15), match='Wo shi ni Ba ba'>
print(str1.group(0))     #Wo shi ni Ba ba
print(str1.group(1))     #Wo
print(str1.group(2))     #shi
print(str1.group(3))     #ni Ba ba
print(str1.groups())     #('Wo', 'shi', 'ni Ba ba')
print(str1.span(1))      #(0, 2)
print(str1.span(2))      #(3, 6)
print(str1.span(3))      #(7, 15)

findall

在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果沒(méi)有找到匹配的,則返回空列表。

findall(string, [pos], [endpos])

string : 待匹配的字符串。 pos : 可選參數(shù),指定字符串的起始位置,默認(rèn)為 0。 endpos : 可選參數(shù),指定字符串的結(jié)束位置,默認(rèn)為字符串的長(zhǎng)度。

pattern = re.compile(r'\d+')  # 查找數(shù)字
result1 = pattern.findall('aaa 123 bbb 456 ccc 789 ddd 222')
result2 = pattern.findall('aa11bbb22cc33dd44cc55', 0, 10)         # 0 10限制查找的下標(biāo)
print(result1)        #['123', '456', '789', '222']
print(result2)        #['11', '22']

re.finditer

和 findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個(gè)迭代器返回。

re.finditer(pattern, string, flags=0)

pattern 匹配的正則表達(dá)式 string 要匹配的字符串。flags 標(biāo)志位

it = re.finditer(r"\d+","aaa 123 bbb 456 ccc 789 ddd 222")
for match in it:
    print(match.group())
#123
#456
#789
#222

re.split

split 方法按照能夠匹配的子串將字符串分割后返回列表

re.split(pattern, string, maxsplit=0, flags=0) maxsplit分隔次數(shù),maxsplit=1 分隔一次,默認(rèn)為 0,不限制次數(shù)。

m = re.split('\W+', 'aaa 123 bbb 456 ccc 789 ddd 222')  #匹配非字母作為分割
print(m)   #['aaa', '123', 'bbb', '456', 'ccc', '789', 'ddd', '222']

m = re.split(' ','aaa 123 BBB 456 ccc 789 ddd 222')    #匹配非空格作為分割
print(m)   #['aaa', '123', 'BBB', '456', 'ccc', '789', 'ddd', '222']

m = re.split('[0-9]{3}','aaa 123 BBB 456 ccc 789 ddd 222')  #出現(xiàn) 3 個(gè)數(shù)字相連 為分割
print(m)  #['aaa ', ' BBB ', ' ccc ', ' ddd ', '']

練習(xí):

#判斷用戶輸入是否是數(shù)字  fullmatch 全文匹配
import  re
num = input('請(qǐng)輸入一段數(shù)字:')
if re.fullmatch(r'\d+(\.?\d+)?',num):   #\d+ 數(shù)字匹配一個(gè)或多個(gè) \.?轉(zhuǎn)義. 出現(xiàn)0 或1 次  后面再是數(shù)字   再把小數(shù)點(diǎn)和小數(shù)點(diǎn)后面的 作為整體  0次或1次
    print('是個(gè)數(shù)字')
    print(num)
else:
    print('不是一個(gè)數(shù)字')

m = 'aaa_123_bbb-456-CCC_789_ddd_222'
#r^\D[a-z0-9A-Z_\-]{3,13}     #以非數(shù)字開(kāi)頭  數(shù)字字母下滑線組成的 長(zhǎng)度4 到14 位的字符串
b = re.match(r'^\D[a-z0-9A-Z_\-]{3,13}', m)
print(b.group())      #aaa_123_bbb-45
print(b.span())       #(0, 14)


#匹配游戲
#r'^[0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[com,cn,net]{1,3}$'

#匹配手機(jī)號(hào)
#r'^1(3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8[0-9]|9[0-9])\d{8}$'

#匹配身份證號(hào) 前6位的地區(qū):[1-9]開(kāi)頭 \d數(shù)字出現(xiàn)5個(gè) (18|19|20)\d{2} 出生的年份18幾幾 19幾幾 20幾幾 1800-2099  月份 ((0|[1-9])|(10|11|12)) 日期 (([0-2][1-9])|10|20|30|31) 最后是3個(gè)數(shù)字, 再加一位 數(shù)字或者Xx結(jié)尾
#r'^[1-9]\d{5}(18|19|20)\d{2}((0|[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$'

補(bǔ)充:Python的re模塊兩個(gè)比較常用的方法

1、sub()方法:將目標(biāo)字符串中符合正則匹配的字符替換成我們想要的字符,最終返回結(jié)果是一個(gè)新的字符串。

語(yǔ)法:sub(pattern,replace,string,count,flags)

參數(shù)說(shuō)明:

   1、pattern:表示匹配模式

   2、replace:表示要替換成的字符串

   3、string:目標(biāo)字符串

   4、count:可選參數(shù),表示模式匹配后替換的最大次數(shù),默認(rèn)值為0,表示替換所有匹配。

   5、flags:可選參數(shù),用于控制匹配方式,常用的例如:re.I,表示無(wú)視字母大小寫(xiě)匹配。

例:

import re
pattern = "\d+"
string = "Abcde123acb888acd"
#將字符串中的數(shù)字替換成”成功“兩個(gè)字
newstr = re.sub(pattern,"成功",string)
print(newstr)

打印結(jié)果:

Abcde成功acb成功acd

增加替換次數(shù):

import re
pattern = "\d+"
string = "Abcde123acb888acd"
newstr = re.sub(pattern,"成功",string,1)
print(newstr)

打印結(jié)果:

Abcde成功acb888acd

2、spilit()方法:將目標(biāo)字符串按照正則匹配的字符串進(jìn)行切割,最終返回結(jié)果是一個(gè)列表。

語(yǔ)法:re.split(pattern,string,maxSplit,flags)

參數(shù)說(shuō)明:

1、pattern:正則匹配模式。

2、string:目標(biāo)字符串。

3、maxSplit:可選參數(shù),按照正則匹配字符串切割的最大切割次數(shù),如果不寫(xiě)表示最大切割。

4、flags:可選參數(shù),用于控制匹配方式,常用的例如:re.I,表示無(wú)視字母大小寫(xiě)匹配。

例:

import re
pattern = "\d+"
string = "Abcde123acb888acd"
newstr = re.split(pattern,string)
print(newstr)

打印結(jié)果:

['Abcde', 'acb', 'acd']

增加切割次數(shù)maxSplit

import re
pattern = "\d+"
string = "Abcde123acb888acd"
newstr = re.split(pattern,string,1)
print(newstr)

打印結(jié)果:

['Abcde', 'acb888acd']

總結(jié)

到此這篇關(guān)于Python正則表達(dá)式以及常用匹配的文章就介紹到這了,更多相關(guān)Python正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python如何把嵌套列表轉(zhuǎn)變成普通列表

    python如何把嵌套列表轉(zhuǎn)變成普通列表

    這篇文章主要為大家詳細(xì)介紹了python如何把嵌套列表轉(zhuǎn)變成普通列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 解決django-xadmin列表頁(yè)filter關(guān)聯(lián)對(duì)象搜索問(wèn)題

    解決django-xadmin列表頁(yè)filter關(guān)聯(lián)對(duì)象搜索問(wèn)題

    今天小編就為大家分享一篇解決django-xadmin列表頁(yè)filter關(guān)聯(lián)對(duì)象搜索問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn)

    Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn)

    本文主要介紹了Python統(tǒng)計(jì)列表中每個(gè)元素出現(xiàn)次數(shù)的4種實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python中用logging實(shí)現(xiàn)日志滾動(dòng)和過(guò)期日志刪除功能

    python中用logging實(shí)現(xiàn)日志滾動(dòng)和過(guò)期日志刪除功能

    這篇文章主要介紹了python中用logging實(shí)現(xiàn)日志滾動(dòng)和過(guò)期日志刪除功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為T(mén)XT文件

    python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為T(mén)XT文件

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為T(mén)XT文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python之如何將標(biāo)簽轉(zhuǎn)化為one-hot(獨(dú)熱編碼)

    python之如何將標(biāo)簽轉(zhuǎn)化為one-hot(獨(dú)熱編碼)

    這篇文章主要介紹了python之如何將標(biāo)簽轉(zhuǎn)化為one-hot(獨(dú)熱編碼)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • django的使用步驟入門(mén)教程(很詳細(xì))

    django的使用步驟入門(mén)教程(很詳細(xì))

    隨著IT行業(yè)的不斷發(fā)展,編程學(xué)習(xí)也越來(lái)越重要,很多人都開(kāi)啟了很多計(jì)算機(jī)語(yǔ)言的學(xué)習(xí),下面這篇文章主要給大家介紹了關(guān)于django的使用步驟入門(mén)教程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • python中import和from-import的區(qū)別解析

    python中import和from-import的區(qū)別解析

    這篇文章主要介紹了python中import和from-import的區(qū)別解析,本文通過(guò)實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 詳解用python寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)-爬取新浪微博評(píng)論

    詳解用python寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)-爬取新浪微博評(píng)論

    這篇文章主要介紹了python爬取新浪微博評(píng)論,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 分析機(jī)器學(xué)習(xí)之決策樹(shù)Python實(shí)現(xiàn)

    分析機(jī)器學(xué)習(xí)之決策樹(shù)Python實(shí)現(xiàn)

    決策樹(shù)是一種非參數(shù)的有監(jiān)督學(xué)習(xí)方法,它能夠從一系列有特征和標(biāo)簽的數(shù)據(jù)中總結(jié)出決策規(guī)則,并用樹(shù)狀圖的結(jié)構(gòu)來(lái)呈現(xiàn)這些規(guī)則,以解決分類和回歸問(wèn)題。決策樹(shù)算法容易理解,適用各種數(shù)據(jù),在解決各種問(wèn)題時(shí)都有良好表現(xiàn)
    2021-06-06

最新評(píng)論