使用正規表示式步驟

2021-10-08 10:52:45 字數 4095 閱讀 2712

使用正規表示式步驟:

s = r'ab\ncde'  # r 防止轉義

print(s) # abcde

1.匯入re模組

import re
定義字串

base_str = 'he6ll2ow7or9ld'

base_str1 = '67he6ll2ow7or9ld'

2.定義匹配規則(需要使用compile()方法)

pattern = re.compile(r'\d+')

pattern2 = re.compile(r'\d')

3.開始匹配

3.1 match(『待匹配的字串』)只匹配成功一次

match()預設從頭開始匹配,如果字串中的第乙個字元不符合制定的規則,直接返回none

不會繼續向下進行匹配

如果使用字串中的第乙個字元符合匹配規則,返回匹配成功的內容(match物件),不會繼續向下匹配

result1 = pattern.match(base_str)

print(result1) # none(匹配不成功)

# base_str = '6he6ll2ow7or9ld'

# pattern = re.compile(r'\d+')

# result1 = pattern.match(base_str)

# print(result1) #

match(『待匹配的字串』,[,start,end])從指定返回中進行匹配

result2 = pattern2.match(base_str1,7,10)

print(result2) #

3.2 group() 分組

group_str = '4h3e2lloworld'

pattern3 = re.compile(r'\dh\de\dl')

res = pattern3.match(group_str)

print(res) # print(res.group()) # 4h3e2l

pattern4 = re.compile(r'(\d)h(\d)e(\d)l') # 加()分組

res = pattern4.match(group_str)

print(res.group()) # 4h3e2l

print(res.group(0)) # 4h3e2l

print(res.group(1)) # 4

print(res.group(2)) # 3

print(res.group(3)) # 2

分組的反向引用(拓展)

注意:反向引用不代表分組,只是前面分組的值的引用

html_str = '

'pattern = re.compile(r'<(html)><(h1)>(.*)')

res2 = pattern.match(html_str1)

print(res2.group(1)) # html

print(res2.group(2)) # h1

print(res2.group(3)) # hellopython

**3.3 search(待匹配字串[,start,end]),**從頭開始匹配

search()方法是全域性匹配,如果整個字串中都沒有符合匹配規則的,才會返回none

如果匹配成功,直接返回匹配成功的字串,不會繼續向下匹配,只匹配成功一次

search_str = 'h3e2l5l7oworld'

pattern = re.compile(r'\d')

res = pattern.search(search_str)

print(res) # pattern = re.compile(r'\d+')

res = pattern.search(search_str)

print(res) #

3.4 findall()方法和match\search都不一樣

findall()全域性匹配會將匹配字串中所有符合規則的字串全部返回

返回的是乙個列表,列表中的每乙個元素都是匹配成功的子串

返回的內容不是match物件

如果整個字串中都沒有符合匹配規則的內容,返回的是空列表,而不是none

findall_str = 'h3e2ll5o6p8yt9hon'

pattern = re.compile(r'\d')

res = pattern.findall(findall_str)

print(res) # ['3', '2', '5', '6', '8', '9']

pattern1 = re.compile(r'v')

res1 = pattern1.findall(findall_str)

print(res1) #

3.5 finditer()方法 和 findall()方法很類似

都是全域性匹配 findall返回列表

finditer 返回的是可迭代物件

finditer_str = 'h3e1l4lo5wo6rl8d'

pattern = re.compile(r'\d')

res = pattern.finditer(finditer_str)

print(res) # for i in res:

# print(i) # match物件

# # # # # # #

print(i.group())

# # 3

# 1# 4

# 5# 6

# 8

3.6 貪婪模式 和 非貪婪模式

html = 'hello

world

python

'

貪婪模式:盡可能多的獲取.*

pattern = re.compile(r'.*

')res = pattern.findall(html)

print(res) # ['hello

world

python

']

非貪婪模式:盡可能少的獲取.*?

pattern = re.compile(r'.*?

')res = pattern.findall(html)

print(res) # ['hello

', 'world

', 'python

']

3.7 匹配中文

中文的編碼範圍:[\u4e00-\u9fa5]

cn_str = 'hello 你好 world 世界'

pattern = re.compile(r'[\u4e00-\u9fa5]+')

res = pattern.findall(cn_str)

print(res) # ['你好', '世界']

爬蟲中萬能的正規表示式匹配規則:

.*?(配合邊界值),再配上re.s(能夠匹配到換行)  ---> 無敵表示式

re.compile(r'《邊界》(.*?)《邊界》',re.s)

使用正規表示式

如果原來沒有使用過正規表示式,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。請回想一下在硬碟上是如何查詢檔案的。您肯定會使用 和 字元來幫助查詢您正尋找的檔案。字元匹配檔名中的單個字元,而 則匹配乙個或多個字元。乙個如 data?dat 的模式可以找到下述檔案 data1.d...

使用正規表示式

本文節選自 並有稍微修正。使用正規表示式 您可以使用正規表示式做很多事情。在以下的列表中,您可以找到一些最普通 最常用的正規表示式的例子。表示文字串必須在一行的開頭。所以,當查詢行的開頭只為 hosts 的行,可以使用命令 grep ls hosts 代表了一行的結尾。所以,當查詢行的結尾只為 ho...

正規表示式使用

1 靜態match方法 使用靜態match方法,可以得到源中第乙個匹配模式的連續子串。2 靜態的matches方法 這個方法的過載形式同靜態的match方法,返回乙個matchcollection,表示輸入中,匹配模式的匹配的集合。3 靜態的ismatch方法 此方法返回乙個bool,過載形式同靜態...