人生苦短,我學python day16 正規表示式

2021-10-13 07:29:20 字數 3373 閱讀 3130

一、正規表示式匹配符號

1.什麼是正規表示式

2.正則符號

re_str =

'abc'

# 規則:乙個字串有3個字元,分別是a、b和c,如果符合結果不是none

result = fullmatch(re_str,

'abc'

)print

(result)

#

. : 表示匹配乙個任意字元

\d : 匹配乙個任意數字

re_str =

'a\db'

# 匹配乙個長度為3,第乙個字元是a,最後乙個是b,中間是乙個任意數字字元

result = fullmatch(re_str,

'a9b'

)print

(result)

#

\s - 匹配乙個空白字元;空白字元:空格字元、\n、\t

\w(了解): 匹配乙個字母、數字或者下劃線(ascii碼表以外的字元都可以匹配)

re_str =

'\d\w\d'

result = fullmatch(re_str,

'z啦啦啦'

)print

(result)

# none

\d : 匹配任意乙個非數字字元;\s: 匹配非空白字元

re_str =

'a\db'

result = fullmatch(re_str,

'a9b'

)print

(result)

# none

[字符集] :匹配字符集**現的任意乙個字元

[a1+] - 匹配字元a或者字元1或者字元+

[\dxy]/[x\dy]/[xy\d] - 字符集的順序不影響最終結果,匹配乙個任意數字或者x或者y

[1-9] - 匹配1-9任意乙個數字字元

[a-z] - 匹配任意乙個小寫字母

[\u4e00-\u9fa5] - 匹配任意乙個中文字元

[a-z+=/] - 匹配小寫字母或者+或者=或者/

[2-8a-z] - 2-8的數字或者a-z的小寫字母

re_str =

'a[xy0]b'

# 匹配乙個長度是3,第乙個字元是a,最後乙個是b,中間是x、y、0中任意乙個字元的字串

result = fullmatch(re_str,

'a0b'

)print

(result)

# re_str =

'a[1-9]b'

result = fullmatch(re_str,

'a8b'

)print

(result)

#

[^字符集] - 匹配不在字符集中的任意乙個字元,只有在最前面才會有效

二、檢測類符號

1.\b:檢測是否是單詞邊界;\b:檢測是否不是單詞邊界

2.^:檢測字串開頭

3.$:檢測是否以指定字串結尾

三、匹配次數

1.+:一次或者多次

2.*:匹配0次或者多次(任意次數)

re_str =

'xa*y'

result = fullmatch(re_str,

'xy'

)print

(result)

#

3.?:匹配0次或者一次

4.{}

5.貪婪和非貪婪*

非貪婪:在匹配次數不確定的次數後加?(+?、*?、??、?、?、?)

re_str1 = r'a.+?b'

# amjhfgb\amjhfgbhugb\amjhfgbhugbedufrb

print

(findall(re_str1,

'amjhfgbhugbedufrb'))

# ['amjhfgb']

四、分組和分支

1.():分組

2.| :分支

3.轉義符號

五、re模組

1.fullmatch(正規表示式,字串)

2.match(正規表示式,字串)

re_str =

'\d'

print

(fullmatch(re_str,

'123'))

# print

(match(re_str,

'123fsdhfgfdyg'))

#

3.search(正規表示式,字串)
print

(search(re_str,

'fsdbh12gergh234'))

#

4.findall(正規表示式,字串)
print

(findall(re_str,

'sfdd212gfgf656123478'))

# ['212', '656', '123', '478']

re_str =

'\d[a-z]'

print

(findall(re_str,

'sfdd212gfgf656123478b'))

# ['212g', '478b']

# 如果有分組,它最終只會返回匹配到的內容中分組對應的結果

re_str =

'(\d)[a-z]'

print

(findall(re_str,

'sfdd212gbgfgf65612cngs3478b'))

# ['212', '612', '478']

re_str =

'(\d)[a-z]([a-z])'

print

(findall(re_str,

'sfdd212gbgfgf65612cngs3478b'))

# [('212', 'b'), ('612', 'n')]

5.split(正規表示式,字串)
print

(split(

'[ab]'

,'helloadhfbwjehfbakwedjib'))

# ['hello', 'dhf', 'wjehf', '', 'kwedji', '']

6.sub(正規表示式,字串1,字串2)
print

(sub(

'\d'

,'+'

,'asfhjdghfbjgi12ugh36jkj4'))

# asfhjdghfbjgi++ugh++jkj+

人生苦短,我學Python(三)

寫在文末的話 我們在程式編寫的過程當中,很有可能會使用不同的資料之間的對應關係,比如一系列單詞對應的翻譯資訊 一系列任命對應的 等,字典能夠讓我們的程式中資料元素之間的關係變得更加符合我們的需求,而不是自己建立對應關係。下面為最基本的字典用法 player print player name pri...

人生苦短,我學 Python 序言

前言 本專欄在保證內容完整性的基礎上,力求簡潔,旨在讓初學者更快地入門python。這個python學習專欄我打算分三個階段 基礎知識 高階知識 實戰訓練。這將是一套完整 高效 循序漸進的python系列講解,您亦可以當做python學習的入門教程。人生苦短,我學 python 基礎篇 初步認識 d...

人生苦短我學Python (六)函式

成長很苦,進步很甜,希望我們大家每天都能夠向上生長。函式的概念引用一下菜鳥教程上的 函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。函式能提高應用的模組性,和 的重複利用率。你已經知道python提供了許多內建函式,比如print 但你也可以自己建立函式,這被叫做使用者自定義函式。定...