Python基礎24 正規表示式,re模組,

2022-05-12 13:58:23 字數 3212 閱讀 5233

一. 正規表示式

正規表示式,又稱規則表示式。(英語:regular expression,在**中常簡寫為regex、regexp或re),電腦科學的乙個概念。正規表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。

正規表示式由普通字元和元字元組成, 普通字元包含大小寫字母, 數字. 在匹配普通字元的時候我們直接寫就可以了

元字元是正規表示式的靈魂

1. 字元組

字元組用括起來, 在中的內容會被匹配

[a-za-z0-9]    表示所有的數字字母

2. 簡單元字元

.    匹配除換行符之外的任意字元

\w    匹配數字或字母或下劃線

\s    匹配任意的空白符

\d    匹配數字

\n    匹配乙個換行符

\t    匹配乙個製表符

\b    匹配乙個單詞的邊界

^    匹配字串的開始

$    匹配字串的結尾

\w    匹配非字母或數字或下劃線

\d    匹配非數字

\s    匹配非空白符

a|b    匹配字元a或字元b

()    匹配括號內的表示式, 也表示乙個組

[...]    匹配字元組中的字元

[^...]    匹配除了字元組中字元的所有字元

3. 量詞

*    重複0次或更多次

+    重複1次或更多次

?    重複0次或1次

重複n次

重複n次或更多次

重複n次到m次

4. 慣性匹配和貪婪匹配

* + {} 都屬於貪婪匹配, 就是盡量多的匹配到結果

在使用.*後再加?就是盡可能的少匹配, 表示惰性匹配

.*?x    表示找到下乙個x為止

5. 分組

使用()進行分組

6. 轉義

在python中, 無論是正規表示式還是待匹配的內容, 都是以字串的內容出現的

r"\\n" 表示正則的r"\n"

二. re模組

import re

python提供的一套關於處理正規表示式的模組

1. findall()    查詢所有, 返回list

result = re.findall("\d", "asdf123asdf456")

print(result)

# ['1', '2', '3', '4', '5', '6']

2. search()        進行匹配, 但是如果匹配到第乙個結果, 就會返回該結果, 匹配不到則返回none

result = re.search("\d", "asdf123asdf456")

print(result.group())

# 13. match()        只能從字串的開頭進行匹配, 匹配不到則返回none

result = re.match("\d", "asdf123asdf456")

print(result.group())

# attributeerror: 'nonetype' object has no attribute 'group'

4. finditer()    和findall用法相似, 但返回的是迭代器

result = re.finditer("\d+", "asdf123asdf456")

print(result)

for el in result:

print(el.group())

# 123

# 456

5. split()        用多個元素去切割

ret = re.split("[ab]", "qweabdfdadffbffs")

print(ret)

# ['qwe', '', 'dfd', 'dff', 'ffs']

6. sub()        替換

ret = re.sub(r"\d+", "_sb_", "faf123fsfs456dsf")

print(ret)

# faf_sb_fsfs_sb_dsf

7. subn()        替換, 替換了多少次

ret = re.subn(r"\d+", "_sb_", "faf123fsfs456dsf")

print(ret)

# ('faf_sb_fsfs_sb_dsf', 2)

8. compile()    將正規表示式編譯成乙個正規表示式物件    

obj = re.compile(r"\d")

ret = obj.search("sfdaf13321fasf123fffsaf")

print(ret.group())

# 133

9. 爬蟲的乙個重點, 分組命名

result = re.finditer("姓名: (?p.*?), 愛好: (?p.*?),", "姓名: 寶寶, 愛好: 女, 年齡: 18")

for el in result:

print(el.group("name"), el.group("hobby"))    

# 寶寶 女

坑1 分組合取消分組許可權

這裡因為findall會優先把匹配結果組裡的內容返回, 如果想要匹配結果, 取消許可權即可

?: 相當於取消了分組的許可權

坑2 split切割 分組加()的結果

# 坑2

ret = re.split("\d+", "asf3faf4asdf")

print(ret)

# ['asf', 'faf', 'asdf']

ret = re.split("(\d+)", "asf3faf4asdf")

print(ret)

# ['asf', '3', 'faf', '4', 'asdf']

在匹配部分加上()後切出來的結果是不同的

沒有()則沒有保留所匹配的項, 有()則保留了匹配的項

這個在某些需要保留匹配部分的使用過程是非常重要的

Python 正規表示式(基礎)

正規表示式 regular expression 是乙個特殊的字串行,描述了一種字串匹配的模式可以用來檢查乙個串是否含有某種子串 將匹配的子串替換或者從某個串中取出符合某個條件的子串,或者是在指定的文章中,抓取特定的字串等。python處理正規表示式的模組是re模組,它是python語言擁有全部的正...

Python正規表示式基礎

直接給出字元就是精確匹配。特殊字元首先需要轉義如 d 匹配乙個數字,w 匹配乙個字母或者數字。123 d 可以匹配 1231 但是無法匹配 123a d d d 可以匹配到 123 w w w 可以匹配到 py3 表示任意乙個字元,py.可以表示py3 py 等 表示任意長個字元,表示至少乙個字元,...

python基礎(正規表示式)

正規表示式用於搜尋 替換和解析字串。正規表示式遵循一定的語法規則,使用非常靈活,功能強大。使用正規表示式編寫一些邏輯驗證非常方便,例如電子郵件位址格式的驗證。python提供了re模組實現正規表示式的驗證。1.簡介 正規表示式是用於文字匹配的工具,它在源字串中查詢與給定的正規表示式相匹配的部分,乙個...