導航:首頁 > 編程語言 > python在線正則表達式

python在線正則表達式

發布時間:2023-08-23 10:30:05

㈠ 從零開始學python爬蟲(四):正則表達式

Regular Expression, 正則表達式, 種使 表達式的 式對字元串進 匹配的語法規則。

我們抓取到的 源代碼本質上就是 個超 的字元串, 想從 提取內容。 正則再合適不過了。

正則的優點: 速度快, 效率 , 准確性 正則的缺點: 新 上 難度有點 。

不過只要掌握了正則編寫的邏輯關系, 寫出 個提取 內容的正則其實並不談旦復雜

正則的語法: 使 元字元進 排列組合 來匹配字元串

在線測試正則表達式網址:

https://tool.oschina.net/regex/

元字元: 具有固定含義的特沖旦殊符號 常 元字元:

量詞: 控制前 的元字元出現的次數

貪婪匹配和惰性匹配

這兩個要著重的說 下,因為我們寫爬 的最多的就是這個惰性匹配。

先看案例

那麼接下來的問題是, 正則我會寫了, 怎麼在python程序中使 正則呢?答案是re模塊

re模塊中我們只需要記住這么 個功能就 夠我們使 了。散侍擾

下面一個案例,是練慣用正則表達式提取豆瓣電影top250的數據並保存,一起來學一下吧。

㈡ Python常用的正則表達式處理函數詳解

正則表達式是一個特殊的字元序列,用於簡潔表達一組字元串特徵,檢查一個字元串是否與某種模式匹配,使用起來十分方便。

在Python中,我們通過調用re庫來使用re模塊:

import re

下面介紹Python常用的正則表達式處理函數。

re.match函數

re.match 函數從字元串的起始位置匹配正則表達式,返回match對象,如果不是起始位置匹配成功的話,match()就返回None。

re.match(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。具體參數為:

re.I:忽略大小寫。

re.L:表示特殊字元集 w, W, , B, s, S 依賴於當前環境。

re.M:多行模式。

re.S:即 . ,並且包括換行符在內的任意字元(. 不包括換行符)。

re.U:表示特殊字元集 w, W, , B, d, D, s, S 依賴於 Unicode 字元屬性資料庫。

re.X:為了增加可讀性,忽略空格和 # 後面的注釋。

import re #從起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.match('def','abcdefghi') print(r2)

運行結果:

其中,span表示匹配成功的整個子串的索引。

使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

group(num):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。

groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。

import re s='This is a demo' r1=re.match(r'(.*) is (.*)',s) r2=re.match(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

運行結果:

上述代碼中的(.*)和(.*?)表示正則表達式的貪婪匹配與非貪婪匹配。

re.search函數

re.search函數掃描整個字元串並返回第一個成功的匹配,如果匹配成功則返回match對象,否則返回None。

re.search(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

import re #從起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.search('def','abcdefghi') print(r2)

運行結果:

使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

group(num=0):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。

groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。

import re s='This is a demo' r1=re.search(r'(.*) is (.*)',s) r2=re.search(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

運行結果:


從上面不難發現re.match與re.search的區別:re.match只匹配字元串的起始位置,只要起始位置不符合正則表達式就匹配失敗,而re.search是匹配整個字元串,直到找到一個匹配為止。

re.compile 函數

compile 函數用於編譯正則表達式,生成一個正則表達式對象,供 match() 和 search() 這兩個函數使用。

re.compile(pattern[, flags])

pattern:一個字元串形式的正則表達式。

flags:可選,表示匹配模式,比如忽略大小寫,多行模式等。

import re #匹配數字 r=re.compile(r'd+')  r1=r.match('This is a demo') r2=r.match('This is 111 and That is 222',0,27) r3=r.match('This is 111 and That is 222',8,27)   print(r1) print(r2) print(r3)

運行結果:

findall函數

搜索字元串,以列表形式返回正則表達式匹配的所有子串,如果沒有找到匹配的,則返回空列表。

需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。

findall(string[, pos[, endpos]])

string:待匹配的字元串。

pos:可選參數,指定字元串的起始位置,默認為0。

endpos:可選參數,指定字元串的結束位置,默認為字元串的長度。

import re #匹配數字 r=re.compile(r'd+')  r1=r.findall('This is a demo') r2=r.findall('This is 111 and That is 222',0,11) r3=r.findall('This is 111 and That is 222',0,27)   print(r1) print(r2) print(r3)

運行結果:

re.finditer函數

和 findall 類似,在字元串中找到正則表達式所匹配的所有子串,並把它們作為一個迭代器返回。

re.finditer(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如是否區分大小寫,多行匹配等。

import re  r=re.finditer(r'd+','This is 111 and That is 222') for i in r:   print (i.group())

運行結果:

re.split函數

將一個字元串按照正則表達式匹配的子串進行分割後,以列表形式返回。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的正則表達式。

string:待匹配的字元串。

maxsplit:分割次數,maxsplit=1分割一次,默認為0,不限次數。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。

import re  r1=re.split('W+','This is 111 and That is 222')  r2=re.split('W+','This is 111 and That is 222',maxsplit=1)  r3=re.split('d+','This is 111 and That is 222')  r4=re.split('d+','This is 111 and That is 222',maxsplit=1)  print(r1) print(r2) print(r3) print(r4)

運行結果:

re.sub函數

re.sub函數用於替換字元串中的匹配項。

re.sub(pattern, repl, string, count=0, flags=0)

pattern:正則中的模式字元串。

repl:替換的字元串,也可為一個函數。

string:要被查找替換的原始字元串。

count:模式匹配後替換的最大次數,默認0表示替換所有的匹配。

import re  r='This is 111 and That is 222' # 刪除字元串中的數字 r1=re.sub(r'd+','',r) print(r1) # 刪除非數字的字元串  r2=re.sub(r'D','',r) print(r2)

運行結果:

到此這篇關於Python常用的正則表達式處理函數詳解的文章就介紹到這了,希望大家以後多多支持!

㈢ 請教Python中匹配IP的正則表達式

下面是IPv4的IP正則匹配表達式

importre
#簡單的匹配給定的字元串是否是ip地址,下面的例子它不是IPv4的地址,但是它滿足正則表達式
ifre.match(r"^(?:[0-9]{1,3}.){3}[0-9]{1,3}$","272.168,1,1"):
print"IPvaild"
else:
print"IPinvaild"
#精確的匹配給定的字元串是否是IP地址
ifre.match(r"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$","223.168.1.1"):
print"IPvaild"
else:
print"IPinvaild"
#簡單的從長文本中提取中提取ip地址
string_ip="isthis289.22.22.22ip?
result=re.findall(r"(?:[0-9]{1,3}.){3}[0-9]{1,3}",string_ip)
ifresult:
printresult
else:
print"recannotfindip"
#精確提取IP
result=re.findall(r"(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",string_ip):
ifresult:
printresult
else:
print"recannotfindip"

下面是IPv6的正則匹配表達式

string_IPv6="1050:0:0:0:5:600:300c:326b"
#匹配是否滿足IPv6格式要求,請注意例子里大小寫不敏感
ifre.match(r"^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$",string_IPv6,re.I):
print"IPv6vaild"
else:
print"IPv6invaild"
#提取IPv6,例子里大小寫不敏感
result=re.findall(r"(?<![:.w])(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}(?![:.w])",string_IPv6,re.I)
#列印提取結果
printresult

㈣ python3 正則表達式如何實現中文模糊匹配替換並輸出

要使用正則表達式實現中文模型李糊匹配替換並輸出,你可以使用 Python 的 re 模塊。以下是一個示例代碼,讀取一個名為 input.txt 的文件,將其中的 "竹某嬋" 或 "竹嬋某" 替換為 "竹嬋嬋",然後將結果保存到一個名為 output.txt 的新文件中:

import re

# 定義一個函數來實現替換操作
def replace_pattern(match_obj):
return "竹嬋嬋"

# 讀取文件內容
with open("input.txt", "r", encoding="utf-8") as file:
content = file.read()

# 使用正則表達式進行模糊匹配替換
pattern = r"竹(?:某|嬋)(?:嬋|某)"
replaced_content = re.sub(pattern, replace_pattern, content)

# 將替換後的內容寫入新的文件
with open("output.txt", "w", encoding="utf-8") as file:
file.write(replaced_content)

在這個例子中,正則表達式 r"竹(?:某|嬋)(?:嬋|某)" 用於匹配 "竹某嬋" 或 "竹嬋某"。(?:...) 是一個非捕獲組,它表示匹配其中的任意一個字元,但不會捕獲該組。這里的組分別包含 "某" 和 "嬋",因此可以匹配 "竹某嬋" 或 "竹嬋某"。接下來,re.sub 函數用於替換匹配到的字元串。這里我們提供了一個替換函行緩數 replace_pattern,它直接返回 "竹嬋嬋"。最後,將替換後的內容寫入一個名為 output.txt 的新文件。

…………

回復:

如果要實現匹配任意特定中文字元,可以使用 Unicode 的中文字元卜帶遲范圍。以下是修改後的示例代碼,可以將 "竹某嬋" 或 "竹嬋某" 替換為 "竹嬋嬋",其中 "某" 為任意中文字元:

import re

# 定義一個函數來實現替換操作
def replace_pattern(match_obj):
return "竹嬋嬋"

# 讀取文件內容
with open("input.txt", "r", encoding="utf-8") as file:
content = file.read()

# 使用正則表達式進行模糊匹配替換
pattern = r"竹[u4e00-u9fa5]嬋|竹嬋[u4e00-u9fa5]"
replaced_content = re.sub(pattern, replace_pattern, content)

# 將替換後的內容寫入新的文件
with open("output.txt", "w", encoding="utf-8") as file:
file.write(replaced_content)

在這個例子中,正則表達式 r"竹[u4e00-u9fa5]嬋|竹嬋[u4e00-u9fa5]" 用於匹配 "竹某嬋" 或 "竹嬋某",其中 "某" 為任意中文字元。[u4e00-u9fa5] 用於匹配任意一個中文字元。接下來,re.sub 函數用於替換匹配到的字元串。這里我們提供了一個替換函數 replace_pattern,它直接返回 "竹嬋嬋"。最後,將替換後的內容寫入一個名為 output.txt 的新文件。

㈤ python入門問題,關於正則表達式。求高手通俗解答。

pattern=r'([1-9]{1,3}(.[0-9]{1,3}){3})'

[1-9]{1,3}表示匹配由1-9之間任意數組成的1位、2位或3位數,如1,12,123

.[0-9]{1,3}表示匹配1個點接由0-9之間任意數組成的1位、2位或3位數,如.1,.12,.123

(.[0-9]{1,3}){3}表示.[0-9]{1,3}的匹配條件重復3次,如.1.2.3,.1.12.123,168.1.1

([1-9]{1,3}(.[0-9]{1,3}){3})表示匹配1-9之間任意數組成的1位、2位或3位數+1個點接由0-9之間任意數組成的1位、2位或3位數 * 3次,所以可以匹配127.0.0.1,192.168.1.66

()僅僅表示括弧內的匹配項作為一組匹配,不會影響匹配的條件,

㈥ python中提供了哪幾種通過正則表達式匹配字元串的方法有哪

python中提供了3種通過正則表達式匹配字元串的方法。種通過正則表達式匹配字元串的方法有以下三種。
1、貪婪匹配與非貪婪匹配:在定義用於匹配的模式串時,使用.*,則為貪婪匹配。使用.*,則為非貪婪匹配。
2、indall與search的選取問題:自己定義的模式串只能匹配到一個結果,使用search方法結合group方法可以直接得到這個字元串。自己定義的模式串能匹配到多個結果,則使用findall方法可以得到存儲多個結果字元串的列表。
3、匹配時"()"和[]的用法:目標字元串『abcde』[…]會匹配在[]內的任意一個字元,而不會匹配整個字元串。(…)會匹配在()內的整個字元串。使用search方法時則正常匹配(相當於沒有()),使用findall方法時則只會匹配(…)的內容。)[]同時出現,考慮(…)式的字元串與[…]式內的字元和順序,使用findall方法時結果會舍棄[…]內容,使用search方法時則正常匹配(相當於沒有()和[])。

閱讀全文

與python在線正則表達式相關的資料

熱點內容
linux內核編譯視頻教程 瀏覽:879
程序員厚黑 瀏覽:187
如何在閑魚淘二手安卓機 瀏覽:175
怎麼下載晨星app 瀏覽:132
兩台伺服器如何同步內容 瀏覽:808
伺服器共用一個ip有什麼壞處 瀏覽:461
go加密exe 瀏覽:606
pdf改分欄 瀏覽:123
python執行怎麼寫 瀏覽:766
遇見她app怎麼加好友 瀏覽:548
手機怎麼設置app強制提醒 瀏覽:77
怎樣不用海綿做解壓玩具 瀏覽:81
為什麼遠程伺服器復制不了文件 瀏覽:715
打開app閃退怎麼回事 瀏覽:752
bcrpt加密原理 瀏覽:401
女程序員寫的小說 瀏覽:774
華為路由器ip設置命令 瀏覽:552
如何打開軟體伺服器 瀏覽:756
單片機介面技術及應用 瀏覽:751
linux下執行腳本文件 瀏覽:127