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

Python標(biāo)準(zhǔn)庫re的使用舉例(正則化匹配)

 更新時(shí)間:2022年10月09日 11:13:26   作者:宋建國  
正則表達(dá)式re是內(nèi)置函數(shù),通過一定的匹配規(guī)則獲取指定的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python標(biāo)準(zhǔn)庫re的使用舉例,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

常用正則表達(dá)式

正則表達(dá)式                                                              描述                                    匹配結(jié)果
\d+(\.\d*)?                                                       任意整數(shù)和浮點(diǎn)數(shù)                            0.004 2 75.

\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b                                      首字母只能大寫                               Boo Foo

^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w-.\/\?%&=\u4e00-\u9fa5]*)?)?$      驗(yàn)證網(wǎng)址                           http://www.baidu.com/?id=1

^[\u4e00-\u9fa5]{0,}$                                                驗(yàn)證漢字                                 漢字漢字

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*                       驗(yàn)證電子郵件                             example@163.com

^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$                                 驗(yàn)證身份證                            14525419951215445X

^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8}                               驗(yàn)證手機(jī)號                             138459572***

^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])          驗(yàn)證IP                             192.168.1.1
\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)
\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)
\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$	

^[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\.s|)$                                驗(yàn)證域名                                baidu.com

^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$               驗(yàn)證文件路徑	                             C:\user\wo

<(.*)>(.*)<\/(.*)>|<(.*)\/>                                        HTML標(biāo)簽匹配(需修改)                          xxxx

一,必備知識

1.修飾符(flag)

re.I  使匹配對大小寫不敏感
re.L  做本地化識別匹配
re.M  多行匹配,影響^和$
re.S  使.匹配包括換行在內(nèi)的所有字符
re.U  根據(jù)Unicode字符集解析字符.這個(gè)標(biāo)志影響\w \W \b \B
re.X  該標(biāo)志通過給予你更靈活的格式以便你將正則表達(dá)式寫的更易于理解.

# 例子 result = re.match('^The.*?(\d+).*?phone.', content, re.S)

2.匹配模式

^          匹配字符串開頭
$          匹配字符串結(jié)尾
.          匹配人以字符,除了換行符號.當(dāng)re.DOTAALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符.
[...]      用來表示一組字符,單獨(dú)列出:[amk]匹配a,m或k
[^...]     不在[]中的字符:[^amk]匹配除amk之外的字符
re*        匹配0個(gè)或多個(gè)的表達(dá)式
re+        匹配1個(gè)或多個(gè)的表達(dá)式
re?        匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式.
re{n}      精準(zhǔn)匹配n個(gè)前面表達(dá)式
re{n,}     匹配大于等于n個(gè)前面表達(dá)式
re{n,m}    匹配n到m個(gè)前面的表達(dá)式定義的片段,貪婪方式
a|b        匹配a或b
(re)       對正則表達(dá)式分組,并記住匹配的文本
(?imx)     正則表達(dá)式包含三種可選標(biāo)志,imx,只影響括號中的區(qū)域.
(?-imx)    正則表達(dá)式關(guān)閉imx可選標(biāo)志,只影響括號中的區(qū)域.
(?:re)     類似(...)但不表示一個(gè)組
(?imx:re)  在括號中使用imx可選標(biāo)志
(?-imx:re) 在括號中不是用imx可選標(biāo)志
(?#...)    注釋
(?=re)     前向肯定界定符.如果所含正則表達(dá)式,以...表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗.但一旦所含表達(dá)式已經(jīng)嘗試,匹配引擎根本沒有提高,模式的剩余部分還要嘗試界定符右邊.
(?!re)     前向否定界定符.與肯定界定符相反;當(dāng)所含的表達(dá)式不能在字符串當(dāng)前位置匹配成功時(shí)成功.
(?>re)     匹配的獨(dú)立模式,省去回朔.
\w         匹配字符數(shù)字以及下劃線
\W         匹配非字母數(shù)字下劃線
\s         匹配任意空白字符,等價(jià)于[\t\n\r\f]
\S         匹配任意非空白字符
\d         匹配任意數(shù)字
\D         匹配任意非數(shù)字
\A         匹配字符串開始
\Z         匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串.
\z         匹配字符串結(jié)束
\G         匹配最后匹配完成的位置
\b         匹配一個(gè)單詞邊界,也就是指單詞和空格之間的位置
\B         匹配非單詞邊界
\n \t      匹配一個(gè)換行符,一個(gè)制表符
\1...\9    匹配第n個(gè)分組的內(nèi)容

3. r的作用

  • r’(\w+) (\w+)(?P.*)’,字符串之前的r可以避免轉(zhuǎn)行符混淆

正則表達(dá)式使用反斜杠來表示特殊形式,或者把特殊字符轉(zhuǎn)義成普通字符。

反斜杠在普通的 Python 字符串里也有相同的作用,所以就產(chǎn)生了沖突。

解決辦法是對于正則表達(dá)式樣式使用 Python 的原始字符串表示法;在帶有 ‘r’ 前綴的字符串字面值中,反斜杠不必做任何特殊處理。

import re

if re.search(r'\\d', 'I have one nee\dle') is not None:
    print('match it',re.search(r'\\d', 'I have one nee\dle').group(0))
else:
    print('not match')

# match it \d

4. 貪婪與非貪婪—通配符后面加?

在貪婪匹配下,.* 會匹配盡可能多的字符

正則表達(dá)式中.*后面是\d+,也就是至少一個(gè)數(shù)字,并沒有指定具體多少個(gè)數(shù)字,因此,.*就盡可能匹配多的字符,這里就把12345匹配了,給\d+留下個(gè)可滿 足條件的數(shù)字 6.最后得到的內(nèi)容就只有數(shù)字6了

import re

content = 'The 123456 is my one phone number.'
print('貪婪匹配:')
result = re.match(r'^The.*(\d+).*', content) #使用match匹配, 第一個(gè)參數(shù)為正則表達(dá)式, 第二個(gè)為要匹配的字符串
print(result.group()) #輸出匹配內(nèi)容
print('result = %s'%result.group(1)) #輸出第一個(gè)被()包裹的內(nèi)容

print('-'*20)

print('非貪婪匹配:')
result = re.match(r'^The.*?(\d+).*', content) 
print(result.group())
print('result = %s'%result.group(1))

# 貪婪匹配:
# The 123456 is my one phone number.
# result = 6
# --------------------
# 非貪婪匹配:
# The 123456 is my one phone number.
# result = 123456

5.轉(zhuǎn)義匹配的使用

由于()屬于正則表達(dá)式的特殊字符, 因此在需要匹配()時(shí), 需要加上轉(zhuǎn)義字符\.

import re

content = '(百度)www.baidu.com'
result = re.match('(百度)www.baidu.com', content)
result2 = re.match('\(百度\)www\.baidu\.com', content)
if result:
    print(result.group())
else:
    print('result = None')
if result2:
    print(result2.group())
else:
    print('result2 = None')

# result = None
# (百度)www.baidu.com

6. group(num = 0)和groups( )

  • group 函數(shù)有一個(gè)int類型的參數(shù),參數(shù)為0表示返回正則匹配的字符串,參數(shù)為1返回正則中第一個(gè)組匹配的內(nèi)容,2返回第二組的內(nèi)容一次類推
  • groups 函數(shù)是所有g(shù)roup函數(shù)結(jié)果組成一個(gè)元組。

二,函數(shù)應(yīng)用

1. re.compile(pattern,flags=0)—自定義匹配模板

  • 他的第一個(gè)參數(shù)是正則字符串,第二個(gè)參數(shù)是修飾符
  • 編譯成一個(gè)正則表達(dá)式對象,可以用于匹配match/search/findall 方法 序列
  • 在需要匹配相同正則表達(dá)式情況下, 事先定義一個(gè)compile可以簡化代碼量, 同時(shí)compile中也可以使用修飾符r.S等.
import re

content1 = '2016-1-1 12:01'
content2 = '2017-1-1 12:02'
content3 = '2018-1-1 12:03'

pattern = re.compile('\d{2}:\d{2}')
result1 = re.sub(pattern, '', content1)
result2 = re.sub(pattern, '', content2)
result3 = re.sub(pattern, '', content3)
print(result1, result2, result3)

#2016-1-1  2017-1-1  2018-1-1 

2. re.match(pattern,string,flags=0)—從第一個(gè)字符開始匹配

  • 該函數(shù)從第一個(gè)字符開始匹配,如果第一個(gè)對不上,就不可能匹配到數(shù)據(jù)

  • 從第一個(gè)字符開始進(jìn)行匹配,不成功則返回None。
  • 一個(gè)正則表達(dá)式中若有多個(gè)()可用group方法輸出,比如:ex_re=re.match(‘(.?)actor(.?)$’),可用ex_re.group()訪問生成的列表,可用ex_re.group(0)訪問第一個(gè)括號里的元素。
  • pettern 就是正則字符串,如果是通過re.compile方法生成的正則對象.match來調(diào)用的話,就不需要這個(gè)參數(shù)了,因?yàn)檎齽t對象本身就代表了一個(gè)正則匹配模式。
  • string 就是要進(jìn)行匹配的目標(biāo)字符串
  • flags 就是正則的修飾符,比如 re.I
import re
regex = '(foo\w)(\w)'
m = re.match(r'(foo\w)(\w)','fooasdfooasd')
if m is not None:
    print(m.group(1))
    print(m.groups())

#輸出
#fooa
#('fooa', 's')

3. re.search(pattern,string,flags=0)—不固定開始,但是只匹配第一個(gè)

  • re.search()并不要求必須從字符串的開頭進(jìn)行匹配如match(),也就是說,正則表達(dá)式可以是字符串的一部分。
  • 用法基本與match相同,只不過是掃描整個(gè)字符串,從一開始匹配到的地方開始。
import re
regex = '<(.*)>(.*)<\/(.*)>|<(.*)\/>'
m = re.search(regex,"aa<a>aaaa</a>")
#一樣只有search能匹配到標(biāo)簽
if m is not None:
    print(m)
    print(m.group())

# 結(jié)果
# <re.Match object; span=(2, 13), match='<a>aaaa</a>'>
# <a>aaaa</a>

4. re.findall(pattern, string,[, flags])—匹配所有數(shù)據(jù)

  • match()和search()都是返回匹配到的第一個(gè)內(nèi)容就結(jié)束匹配, findall()是返回所有符合匹配規(guī)則的內(nèi)容
  • 搜索字符串內(nèi),以列表形式返回全部能匹配的子串。
import re
text = "I am so happy! "
array1 = re.findall("[a-zA-Z]", text)
array2 = re.findall("[a-zA-Z]+", text)
print(array1)
print(array2)

#結(jié)果
# ['I', 'a', 'm', 's', 'o', 'h', 'a', 'p', 'p', 'y']
# ['I', 'am', 'so', 'happy']

5. finditer(pattern, string,[,flags] )—返回的是匹配到的迭代器對象

與findall()相同,但返回的是一個(gè)迭代器。對于每一次匹配,迭代器都能返回一個(gè)匹配對象

import re
regex = 'apple'
m = [ g.group() for g in re.finditer(regex,'apple1 apple2 apple3')]
print(m)
#輸出
#['apple', 'apple', 'apple']

6. split(pattern, string, max = 0)

根據(jù)正則表達(dá)式的模式分隔符,split函數(shù)將字符串分割為列表,返回匹配列表,分割最多操作max次

import re
list = [
'aaa,bbb,ccc',
'ddd,eee,fff',
]
for i in list:
    print(re.split(',',i))

# ['aaa', 'bbb', 'ccc']
# ['ddd', 'eee', 'fff']

7. re.sub(pattern, repl, string, count=0, flags=0)—可正則的字符串替換

替換字符串中的某些子串,可以用正則表達(dá)式來匹配被選子串。

pattern:表示正則表達(dá)式中的模式字符串;

repl:被替換的字符串(既可以是字符串,也可以是函數(shù));

string:要被處理的,要被替換的字符串;

count:匹配的次數(shù), 默認(rèn)是全部替換

import re
st = "hello 2019"
st = re.sub("([0-9]+)","yudengwu",st)
print(st)

#結(jié)果
# hello yudengwu

8. str.replace(old, new,max)—不是re函數(shù),僅用作字符串替換

  • 替代字符串中的某一些子串為另一些字符。
  • old – 將被替換的子字符串。
  • new – 新字符串,用于替換old子字符串。
  • max – 可選字符串, 替換不超過 max 次
import re
st = "我喜歡你,喜歡你"
st = st.replace("喜歡","愛",1)
print(st)

# 我愛你,喜歡你

總結(jié)

到此這篇關(guān)于Python標(biāo)準(zhǔn)庫re的使用舉例的文章就介紹到這了,更多相關(guān)Python標(biāo)準(zhǔn)庫re使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python遍歷某目錄下的所有文件夾與文件路徑

    Python遍歷某目錄下的所有文件夾與文件路徑

    這篇文章主要介紹了Python遍歷某目錄下的所有文件夾與文件路徑 以及輸出中文亂碼問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python 正則表達(dá)式詳解

    Python 正則表達(dá)式詳解

    這篇文章主要介紹了Python中正則表達(dá)式的詳細(xì)教程,正則表達(dá)式是Python學(xué)習(xí)進(jìn)階當(dāng)中的重要內(nèi)容,需要的朋友可以參考下
    2021-10-10
  • python保存二維數(shù)組到txt文件中的方法

    python保存二維數(shù)組到txt文件中的方法

    今天小編就為大家分享一篇python保存二維數(shù)組到txt文件中的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • ?Python?代碼制作動態(tài)鞭炮

    ?Python?代碼制作動態(tài)鞭炮

    這篇文章主要介紹了?Python?代碼制作動態(tài)鞭炮,將一個(gè)錄制好的鞭炮視頻以字符畫的形式復(fù)現(xiàn),基本步驟是幀采樣?→?逐幀轉(zhuǎn)換為字符畫?→?字符畫合成視頻,下面來看看具體的實(shí)現(xiàn)步驟吧,需要的小伙伴可以參考一下
    2022-01-01
  • 對pytorch中不定長序列補(bǔ)齊的操作

    對pytorch中不定長序列補(bǔ)齊的操作

    這篇文章主要介紹了對pytorch中不定長序列補(bǔ)齊的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python監(jiān)控進(jìn)程腳本

    python監(jiān)控進(jìn)程腳本

    這篇文章主要為大家詳細(xì)介紹了python監(jiān)控進(jìn)程腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 對pandas的算術(shù)運(yùn)算和數(shù)據(jù)對齊實(shí)例詳解

    對pandas的算術(shù)運(yùn)算和數(shù)據(jù)對齊實(shí)例詳解

    今天小編就為大家分享一篇對pandas的算術(shù)運(yùn)算和數(shù)據(jù)對齊實(shí)例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python實(shí)現(xiàn)區(qū)域填充的示例代碼

    Python實(shí)現(xiàn)區(qū)域填充的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)區(qū)域填充的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python實(shí)現(xiàn)GPU加速的基本操作

    Python實(shí)現(xiàn)GPU加速的基本操作

    本文簡單介紹了Python實(shí)現(xiàn)GPU加速的基本操作,文中運(yùn)用大量代碼講解的非常詳細(xì),有一定的參考價(jià)值,需要學(xué)習(xí)相關(guān)知識的小伙伴一起來看看吧
    2021-08-08
  • Python 數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解

    Python 數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評論