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

Python標準庫re的使用舉例(正則化匹配)

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

常用正則表達式

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

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

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

^[\u4e00-\u9fa5]{0,}$                                                驗證漢字                                 漢字漢字

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

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

^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8}                               驗證手機號                             138459572***

^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])          驗證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|)$                                驗證域名                                baidu.com

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

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

一,必備知識

1.修飾符(flag)

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

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

2.匹配模式

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

3. r的作用

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

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

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

解決辦法是對于正則表達式樣式使用 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+,也就是至少一個數(shù)字,并沒有指定具體多少個數(shù)字,因此,.*就盡可能匹配多的字符,這里就把12345匹配了,給\d+留下個可滿 足條件的數(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匹配, 第一個參數(shù)為正則表達式, 第二個為要匹配的字符串
print(result.group()) #輸出匹配內(nèi)容
print('result = %s'%result.group(1)) #輸出第一個被()包裹的內(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)義匹配的使用

由于()屬于正則表達式的特殊字符, 因此在需要匹配()時, 需要加上轉(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ù)有一個int類型的參數(shù),參數(shù)為0表示返回正則匹配的字符串,參數(shù)為1返回正則中第一個組匹配的內(nèi)容,2返回第二組的內(nèi)容一次類推
  • groups 函數(shù)是所有g(shù)roup函數(shù)結(jié)果組成一個元組。

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

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

  • 他的第一個參數(shù)是正則字符串,第二個參數(shù)是修飾符
  • 編譯成一個正則表達式對象,可以用于匹配match/search/findall 方法 序列
  • 在需要匹配相同正則表達式情況下, 事先定義一個compile可以簡化代碼量, 同時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)—從第一個字符開始匹配

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

  • 從第一個字符開始進行匹配,不成功則返回None。
  • 一個正則表達式中若有多個()可用group方法輸出,比如:ex_re=re.match(‘(.?)actor(.?)$’),可用ex_re.group()訪問生成的列表,可用ex_re.group(0)訪問第一個括號里的元素。
  • pettern 就是正則字符串,如果是通過re.compile方法生成的正則對象.match來調(diào)用的話,就不需要這個參數(shù)了,因為正則對象本身就代表了一個正則匹配模式。
  • string 就是要進行匹配的目標字符串
  • 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)—不固定開始,但是只匹配第一個

  • re.search()并不要求必須從字符串的開頭進行匹配如match(),也就是說,正則表達式可以是字符串的一部分。
  • 用法基本與match相同,只不過是掃描整個字符串,從一開始匹配到的地方開始。
import re
regex = '<(.*)>(.*)<\/(.*)>|<(.*)\/>'
m = re.search(regex,"aa<a>aaaa</a>")
#一樣只有search能匹配到標簽
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()都是返回匹配到的第一個內(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()相同,但返回的是一個迭代器。對于每一次匹配,迭代器都能返回一個匹配對象

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ù)正則表達式的模式分隔符,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)—可正則的字符串替換

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

pattern:表示正則表達式中的模式字符串;

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

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

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

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標準庫re的使用舉例的文章就介紹到這了,更多相關(guān)Python標準庫re使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解Python虛擬機中調(diào)試器實現(xiàn)原理與源碼分析

    深入理解Python虛擬機中調(diào)試器實現(xiàn)原理與源碼分析

    本文主要給大家介紹python中調(diào)試器的實現(xiàn)原理,通過了解一個語言的調(diào)試器的實現(xiàn)原理我們可以更加深入的理解整個語言的運行機制,可以幫助我們更好的理解程序的執(zhí)行,感興趣的可以了解一下
    2023-04-04
  • Python selenium的這三種等待方式一定要會!

    Python selenium的這三種等待方式一定要會!

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著selenium三種等待方式展開,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-06-06
  • Go語言基于Socket編寫服務(wù)器端與客戶端通信的實例

    Go語言基于Socket編寫服務(wù)器端與客戶端通信的實例

    這篇文章主要介紹了Go語言基于Socket編寫服務(wù)器端與客戶端通信的實例,包括實現(xiàn)基于自定義通訊協(xié)議的Socket通信,需要的朋友可以參考下
    2016-02-02
  • Pandas缺失值填充 df.fillna()的實現(xiàn)

    Pandas缺失值填充 df.fillna()的實現(xiàn)

    本文主要介紹了Pandas缺失值填充 df.fillna()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Django中更改默認數(shù)據(jù)庫為mysql的方法示例

    Django中更改默認數(shù)據(jù)庫為mysql的方法示例

    這篇文章主要介紹了Django中更改默認數(shù)據(jù)庫為mysql的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • tensorflow 變長序列存儲實例

    tensorflow 變長序列存儲實例

    今天小編就為大家分享一篇tensorflow 變長序列存儲實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • PyTorch計算損失函數(shù)對模型參數(shù)的Hessian矩陣示例

    PyTorch計算損失函數(shù)對模型參數(shù)的Hessian矩陣示例

    這篇文章主要為大家介紹了PyTorch計算損失函數(shù)對模型參數(shù)的Hessian矩陣的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python jieba庫用法及實例解析

    Python jieba庫用法及實例解析

    這篇文章主要介紹了Python jieba庫用法及實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Python安裝Bs4的多種方法

    Python安裝Bs4的多種方法

    這篇文章主要介紹了Python安裝Bs4幾種方法,本文通過多種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 對python捕獲ctrl+c手工中斷程序的兩種方法詳解

    對python捕獲ctrl+c手工中斷程序的兩種方法詳解

    今天小編就為大家分享一篇對python捕獲ctrl+c手工中斷程序的兩種方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論