python基礎(正規表示式)

2021-08-10 23:48:05 字數 4467 閱讀 1318

正規表示式用於搜尋、替換和解析字串。正規表示式遵循一定的語法規則,使用非常靈活,功能強大。使用正規表示式編寫一些邏輯驗證非常方便,例如電子郵件位址格式的驗證。python提供了re模組實現正規表示式的驗證。

1.簡介

正規表示式是用於文字匹配的工具,它在源字串中查詢與給定的正規表示式相匹配的部分,乙個正規表示式是由字母、數字和特殊字元(括號、星號、問號)組成,正規表示式中有許多特殊的字元,這些特殊字元是構成正規表示式的要素。

正規表示式中的特殊字元:

^ —–正規表示式的開始符號

$ —–正規表示式的結束符號

\w ——匹配字母、數字、下劃線

\w —–匹配不是字母、數字、下劃線的字元

\s —–匹配空白字元

\s —–匹配不是空白的字元

\d —-匹配數字

\d —-匹配非數字的字元

\b —-匹配單詞的開始和結束

\b —-匹配不是單詞開始和結束

. —-匹配任意字元,包括漢字

如果要匹配**號碼,需要形如「\d\d\d\d-\d\d\d\d\d\d\d」這樣的正規表示式,其中出現了11次「\d」,表達方式繁瑣,正規表示式提供了對表示式的一部分進行重複處理的功能。

正規表示式中的常用限定符:

* —–匹配零次或多次

+ —–匹配一次或多次

? —–匹配一次或零次

—-重複m次

—重複m到n次,其中n可以省略

利用{}可以控制字元重複的次數,例如\d表示1~3位數字,前面提到的**號碼採用如下的正規表示式:

\d-\d|\d-\d
如果要對正規表示式進行巢狀,就需要使用分組「()」,例如,對3位數字重複3次,可以使用如下的正規表示式表示:

(\d

\d\d)

預設情況下,正規表示式將匹配最長的字串作為結果,可以通過在限定符後面新增「?」的方式,獲取最短的匹配結果,例如,對字元「a」到字元「c」之間的字元進行匹配。

2.使用re模組處理正規表示式

python的re模組具有正規表示式匹配的功能,re模組提供了一些根據正規表示式進行查詢、替換、分隔字串的函式,這些函式使用乙個正規表示式作為第乙個引數。

re模組的常用函式:

findall(pattern,string,flags=0):根據pattern在string中匹配字串。如果匹配成功,返回包含匹配結果的結果列表,否則,返回空列表。

sub(pattern,repl,string,count=0):根據指定的正規表示式,替換源字串中的 子串。pattern是乙個正規表示式,repl是用於替換的字串,string是源字串,如果count等於0,則返回string中匹配的所有結果,如果,count大於0,則返回前count個匹配結果。

match(pattern,string,flags=0):根據pattern從string的開頭匹配字串,只返回第一次匹配成功的物件,否則,返回none

search(pattern,string,flags=0):根據pattern從string中匹配字串,只返回第一次匹配成功的物件,否則,返回none

compile(pattern,flags=0)編譯正規表示式pattern,返回乙個pattern物件。

escape(pattern):匹配字串中的特殊字元,如*、+、?等

練習1:

import re

#^與$的使用

s = "hello world"

print(re.findall(r"^hello",s)) #預設區分大小寫的從字串開頭匹配以「hello」開始的字串

print(re.findall(r"hello",s,re.i)) #re.i為輔助引數,表示忽略大小寫,不區分大小寫的從字串開頭匹配以「hello」開始的字串

print(re.findall(r"world$",s)) #預設區分大小寫的從字串尾部匹配以「hello」開始的字串

print(re.findall(r"world$",s,re.i)) #不區分大小寫的從字串尾部匹配以「hello」開始的字串

print(re.findall(r"\b\w+\b",s)) #匹配每個英文單詞

s = "hello world"

print(re.sub("hello","hi",s))

print(re.sub("hello","hi",s[-4:])) #在切片是[-4:]範圍內替換「hello」,即在字串「orld」中替換「hello」

print(re.sub("world","china",s[-5:])) #在分片s[-5:]範圍內替換「world」,即把字串「world」替換為「china」

s = "你好 world2"

print("匹配字母數字:"+re.sub(r"\w","hi",s))

print("替換次數:"+str(re.subn(r"\w","hi",s)[1]))

print("匹配任意字元:"+re.sub(r".","hi",s))

print("替換次數:"+str(re.subn(r".","hi",s)[1]))

執行結果:

d

:\python36\python.exe e

:/demo_py/python/char_6/re_sign.py

['hello']

['world']

['hello', 'world']

hi world

orld

china

匹配字母數字:hihi hihihihihihi

替換次數:8

匹配任意字元:hihihihihihihihihi

替換次數:9

練習2:

import re

tel1 = "0791-1234567"

print(re.findall(r"\d-\d|\d-\d",tel1)) #匹配區號為3位的8位數**號碼或區號為4為的7位數**號碼,區號和**號碼之間用—連線

tel2 = "010-12345678"

print(re.findall(r"\d-\d|\d-\d",tel2))

tel3 = "(010)12345678"

print(re.findall(r"[\( ]?\d[\]-]?\d|[\( ]?\d[\]-]?\d",tel3)) #匹配區號為3位的8位數**號碼或區號為4為的7位數**號碼,區號和**號碼之間用—連線,或區號兩側加圓括號

執行結果:

d

:\python36\python.exe e

:/demo_py/python/char_6/re_number.py

['0791-1234567']

['010-12345678']

練習3:

import re

s = "1abc23def45"

p = re.compile(r"\d+") #返回乙個正規表示式物件p,匹配變數s中的數字

print(p.findall(s)) #呼叫p中的findall()方法,匹配的結果存放在列表中

print(p.pattern) #輸出當前使用的正規表示式

p = re.compile(r"(abc)\1") #定義乙個分組"(abc)",在後面使用「1」再次呼叫該分組,compile()返回乙個包含2個分組的正規表示式物件p

m = p.match("abcabcabc") #對字串進行搜尋,返回乙個match物件m

print(m.group(0)) #匹配0號組

print(m.group(1)) #匹配1號組

print(m.group()) #預設返回0號組

p = re.compile(r"(?p)abc(?p=one)") #給分組命名one表示分組的名稱,「(?p=one)呼叫分組one,相當於「\1」」

m = p.search("abcabcabc")

print(m.group("one"))

print(m.groupdict().keys()) #獲取正規表示式中分組的名稱

print(m.groupdict().values())#獲取正規表示式中分組的內容

print(m.re.pattern) #獲取當前使用的正規表示式

執行結果:

d

:\python36\python.exe e

:/demo_py/python/char_6/re.compiler.py

['1', '23', '45']

\d+abcabc

abcabcabc

dict_keys(['one'])

dict_values([''])

(?p)abc(?p=one)

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基礎 正規表示式

re模組 正規表示式 元字元 不是普通的字元,是特殊字元!1 萬用字元 可以匹配除了換行符以外的任意乙個字元 例子 re.findall l.e abcloveabc 匹配字串中以l開頭以e結尾且長度為4的字串,若有多個則以列表的形式返回 2 以什麼開頭,只能從str開頭進行匹配 例子 re.fin...