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

python正則表達(dá)式用法超詳細(xì)講解大全

 更新時(shí)間:2022年10月10日 09:16:11   作者:YZL40514131  
正則表達(dá)式是一種用來匹配字符串的強(qiáng)有力的武器,利用字符來匹配字符的思想,基于顯示規(guī)則進(jìn)行模式匹配,可以高效組合成不同樣式的字符串,下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式用法超詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下

一、re.compile 函數(shù)

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

案例:如何判斷是正規(guī)的手機(jī)號(hào)

phone='''
weref234
16888888888
as13423423
weq
435435
15812312312e
afa15812312316
13111111111
'''

pattern=re.compile(r'1[3-9]\d{9}')  	#todo 編譯正則表達(dá)式之后得到一個(gè)編譯對(duì)象

result=pattern.search(phone)   			#todo search只會(huì)返回第一個(gè)匹配的結(jié)果,如果沒有匹配成功返回None
print(result)                   		#todo <re.Match object; span=(10, 21), match='15812312312'>

打印結(jié)果:

<re.Match object; span=(10, 21), match=‘16888888888’>
16888888888
(10, 21)

??????特別注意1

result=pattern.search(phone):search匹配成功返回的是Match對(duì)象;search只會(huì)返回第一個(gè)匹配的結(jié)果,如果沒有匹配成功則返回None
result.group():返回第一個(gè)匹配結(jié)果
result.span():返回第一個(gè)匹配結(jié)果的下標(biāo),為什么是(10,21)吶?
weref234:從0開始,4結(jié)束后還包含了換行符’/n’2個(gè)字符,所以從10開始,不包含21,前閉后開的原則

??????特別注意2

match函數(shù):match匹配成功返回的是Match對(duì)象;作用用來匹配第一個(gè)注意是第一個(gè)字符的,這里的第一個(gè)是在被搜索的這串字符的第一個(gè)索引上的;如果第一個(gè)字符不匹配,則返回None

phone='''
weref234
16888888888
as13423423
weq
435435
15812312312e
afa15812312316
13111111111
'''

pattern=re.compile(r'1[3-9]\d{9}')     #todo 編譯正則表達(dá)式之后得到一個(gè)編譯對(duì)象
result2=pattern.match(phone)
print(result2)

打印結(jié)果為None,因?yàn)榈谝粋€(gè)字符為w開頭,所以匹配不到

phone1="17812312345aaa"
pattern=re.compile(r'1[3-9]\d{9}')     #todo 編譯正則表達(dá)式之后得到一個(gè)編譯對(duì)象

result2=pattern.match(phone1)   #todo match函數(shù)是從第一個(gè)字符開始匹配(從w開始匹配),如果第一個(gè)字符不匹配,則返回None
print(result2)
print(result2.group())   #todo 返回第一個(gè)匹配結(jié)果
print(result2.span())    #todo 返回第一個(gè)匹配結(jié)果的下標(biāo)

打印結(jié)果:

<re.Match object; span=(0, 11), match=‘17812312345’>
17812312345
(0, 11)

二、正則表達(dá)式

表示字符

.:匹配任意單個(gè)字符(不包括換行符)
[]:匹配字符集,區(qū)間中的集合,可匹配其中任意一個(gè)字符
\d:匹配數(shù)字,即0-9,可以表示為[0-9]、
\s:匹配空白字符,即空格
\S:匹配非空白字符,
\w:匹配單詞字符,即a-z、A-Z、0-9、_
\W:匹配非單詞字符

import re
#.匹配任意單個(gè)字符(不包括換行符)
one='123a'
res=re.match('.',one)
print(res.group())

#[]:匹配字符集,區(qū)間中的集合,可匹配其中任意一個(gè)字符
two='8'
res1=re.match('[0-9]',two)   #匹配1-9之間的數(shù)字
print(res1.group())

res2=re.match('[0,1,8,9]',two)  #匹配0、1、8、9之間的數(shù)字
print(res2.group())

two_2='Hello Python'
print(re.match('[hH]',two_2).group())    #匹配小寫或大寫H

#\d:匹配數(shù)字,即0-9,可以表示為[0-9]
three='天空1號(hào)發(fā)射成功'
print(re.match('天空\(chéng)d',three).group())
print(re.search('\d',three).group())

表示數(shù)字

*:匹配前一個(gè)字符出現(xiàn)0次或者無限次,即可有可無
+:匹配前一個(gè)字符出現(xiàn)1次或者無限次,即至少有1次
?:匹配前一個(gè)字符出現(xiàn)1次或者0次,即要么有1次,要么沒有
{m}:匹配前一個(gè)字符出現(xiàn)m次
{m,}:匹配前一個(gè)字符至少出現(xiàn)m次
{m,n}:匹配前一個(gè)字符出現(xiàn)從m到n次

需求1:匹配一個(gè)字符串第一個(gè)字母是大寫,后面的字母必須是小寫或者沒有

print(re.match('[A-Z][a-z]*','Mn').group())
print(re.match('[A-Z][a-z]*','Msdfsg').group())
print(re.match('[A-Z][a-z][a-z]','Msdfs').group())

Mn
Msdfsg
Msd

需求2 匹配一個(gè)變量名,

print(re.match(r'[a-zA-Z_]+[\w]*','name1').group())
print(re.match(r'[a-zA-Z_]+[\w]*','_name1').group())
print(re.match(r'[a-zA-Z_]+[\w]*','2_name1'))

name1
_name1
None

需求3:匹配0-99之間的任意一個(gè)數(shù)字

print(re.match('[0-9]?[0-9]','88').group())
print(re.match('[0-9]?[0-9]','8').group())
print(re.match('[0-9]?[0-9]','08').group())
print(re.match('[0-9]?[0-9]','888').group())

88
8
08
88

需求4:匹配密碼(8-20位,可以是大小寫的字母、數(shù)字、下劃線)

print(re.match('[a-zA-Z0-9_]{8,20}','12345678').group())
print(re.match('[a-zA-Z0-9_]{8}','12345678').group())

12345678
12345678

匹配邊界

^:表示以什么開頭
$:表示以什么結(jié)尾
\b:表示匹配單詞的邊界
|:或者

需求5:匹配163的郵箱地址,郵箱的用戶名包含6~18個(gè)字符,可以是數(shù)字、字母、下劃線、但是必須以字母開頭,.com結(jié)尾

emails='''
    awhaldc@163.com
asdasdfddasdfascvdfgbdfgdsds@163.com
afa_@163.com
awhaldc666@163.comax
q112dsdasdas@163.com
aaaa_____@qq.com
aaaa____@qq.com
'''
print(re.search('^[a-zA-Z][\w]{5,17}@163\.com$',emails,re.MULTILINE).group())

q112dsdasdas@163.com

需求6:匹配單詞的邊界

print(re.search(r'.*\bbeijing\b','I Love beijing too'))
print(re.search(r'.*\bbeijing\b','I Love beijing1 too'))

print(re.search(r'.*beijing','I Love beijing too'))

I Love beijing
None
I Love beijing

三、re模塊的高級(jí)用法

re.findall(pattern,string)

1、findall:pattern在string里所有的非重復(fù)匹配,返回一個(gè)迭代器iterator保存了匹配對(duì)象

需求7:匹配所有符合以下條件的郵箱

163的郵箱地址,

郵箱的用戶名包含6~18個(gè)字符,

可以是數(shù)字、字母、下劃線、

但是必須以字母開頭,

.com結(jié)尾

import re

emails='''
awhaldc@163.com
asdasdfddasdfascvdfgbdfgdsds@163.com
afa_@163.com
112dsdasdas@163.com
aaaa_____@126.com
aaaa____@163.com
'''

#findall:pattern在string里所有的非重復(fù)匹配,返回一個(gè)迭代器iterator保存了匹配對(duì)象
list=re.findall(r'(^[a-zA-Z][\w]{5,17}@(163|126).com$)',emails,re.MULTILINE)

print(list)
for email in list:
    print(email[0])

[(‘awhaldc@163.com’, ‘163’), (‘aaaa_____@126.com’, ‘126’), (‘aaaa____@163.com’, ‘163’)]
awhaldc@163.com
aaaa_____@126.com
aaaa____@163.com

2、sub:將匹配到的字符串,再次進(jìn)行操作

需求8:匹配一個(gè)數(shù)字,把匹配的數(shù)字進(jìn)行家1,返回

def add(result):    #result是一個(gè)匹配對(duì)象
    str_num=result.group()
    num=int(str_num)+1
    return str(num)


print(re.sub(r'\d+',add,'a=111'))

a=112

3、split:切割匹配成功的字符串

line='hello,world,china.'
print(re.split(r'\W+',line))

[‘hello’, ‘world’, ‘china’, ‘’]

需求9:以冒號(hào)或者空格,切割字符串

print(re.split(r':| ','info:kobe 18 beijing'))

[‘info’, ‘kobe’, ‘18’, ‘beijing’]

四、貪婪和非貪婪模式

什么是貪婪模式?
python里數(shù)量詞默認(rèn)是貪婪的,總是嘗試匹配盡可能多的字符
什么是非貪婪模式?
與貪婪模式相反,總是嘗試匹配盡可能少的字符,可以使用、?、+、{m,n}加上?,使貪婪模式變?yōu)榉秦澙纺J?

需求9:非貪婪模式,需求:把電話和電話的描述信息盡可能的分開,只能用正則表達(dá)式

line2='this is my phone:188-1111-6666'
#非貪婪模式,需求:把電話和電話的描述信息盡可能的分開,只能用正則表達(dá)式
result=re.match(r'(.+?)(\d+-\d+-\d+)',line2)
print(result.group(1))
print(result.group(2))

this is my phone:
188-1111-6666

總結(jié)

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

相關(guān)文章

  • 元組列表字典(莫煩python基礎(chǔ))

    元組列表字典(莫煩python基礎(chǔ))

    這篇文章主要介紹了python元組列表字典,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子

    numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子

    今天小編就為大家分享一篇numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python將回車作為輸入內(nèi)容的實(shí)例

    python將回車作為輸入內(nèi)容的實(shí)例

    今天小編就為大家分享一篇python將回車作為輸入內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python抓取網(wǎng)頁(yè)圖片并放到指定文件夾

    python抓取網(wǎng)頁(yè)圖片并放到指定文件夾

    這篇文章主要介紹了python抓取網(wǎng)頁(yè)圖片并放到指定文件夾,需要的朋友可以參考下
    2014-04-04
  • python3中獲取文件當(dāng)前絕對(duì)路徑的兩種方法

    python3中獲取文件當(dāng)前絕對(duì)路徑的兩種方法

    下面小編就為大家分享一篇python3中獲取文件當(dāng)前絕對(duì)路徑的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python中最大最小賦值小技巧(分享)

    Python中最大最小賦值小技巧(分享)

    下面小編就為大家分享一篇Python中最大最小賦值小技巧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Python2到Python3的遷移過程中報(bào)錯(cuò)AttributeError: ‘str‘ object has no attribute ‘decode‘問題的解決方案大全

    Python2到Python3的遷移過程中報(bào)錯(cuò)AttributeError: ‘str‘ objec

    在 Python 編程過程中,AttributeError: 'str' object has no attribute 'decode' 是一個(gè)常見的錯(cuò)誤,這通常會(huì)在處理字符串時(shí)出現(xiàn),尤其是在 Python 2 到 Python 3 的遷移過程中,本文將詳細(xì)介紹該問題的根源,并提供解決方案,需要的朋友可以參考下
    2025-04-04
  • Python使用watchfiles實(shí)現(xiàn)監(jiān)控目錄變更

    Python使用watchfiles實(shí)現(xiàn)監(jiān)控目錄變更

    在工作中難免會(huì)碰到這樣的需求,監(jiān)控指定目錄,下面小編就來和大家介紹一下如何利用watchfiles 模塊實(shí)現(xiàn)監(jiān)控目錄的變更,感興趣的可以了解下
    2023-09-09
  • python virtualenv虛擬環(huán)境配置與使用教程詳解

    python virtualenv虛擬環(huán)境配置與使用教程詳解

    這篇文章主要介紹了python virtualenv虛擬環(huán)境配置與使用教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 使用python開發(fā)vim插件及心得分享

    使用python開發(fā)vim插件及心得分享

    Vim 插件是一個(gè) .vim 的腳本文件,定義了函數(shù)、映射、語(yǔ)法規(guī)則和命令,可用于操作窗口、緩沖以及行。一般一個(gè)插件包含了命令定義和事件鉤子。當(dāng)使用 Python 編寫 vim 插件時(shí),函數(shù)外面是使用 VimL 編寫,盡管 VimL 學(xué)起來很快,但 Python 更加靈活
    2014-11-11

最新評(píng)論

伊吾县| 寻乌县| 临武县| 绥江县| 漳州市| 钟山县| 靖边县| 车致| 漳浦县| 方城县| 永川市| 红河县| 运城市| 湾仔区| 洛隆县| 丰都县| 弋阳县| 潍坊市| 农安县| 旅游| 宝兴县| 福清市| 磴口县| 新津县| 左云县| 芷江| 新邵县| 娄烦县| 常山县| 永年县| 泰顺县| 东乡族自治县| 镇宁| 昌乐县| 汕尾市| 平遥县| 太湖县| 将乐县| 栾川县| 田东县| 宁乡县|