正規表示式基本使用

2021-08-21 05:00:42 字數 4028 閱讀 3078

常用函式

正規表示式——描述字串排列的規則:

在對字串進行處理的時候,希望按照自定義的規則進行處理,稱為模式。我們用正規表示式描述這些自定義規則,也稱為模式表示式

主要用途:用於字串的匹配,檢查是否滿足某種規則

在python中,經常使用re模組實現正規表示式

原子是正規表示式的基本單位,每個正規表示式至少要包含乙個原子,常見如下:

(1)普通字元作為原子

普通字元即數字,大小寫字母等

import re

pattern="yue"

string=""

result=re.search(pattern,string)

print(result)

執行可以看到輸出結果為

<_sre.sre_match

object; span=(16,

19), match='yue'>

(2)非列印字元作為原子

比如說\n\t

print(result)執行得到結果如下:

<_sre.sre_match

object; span=(5,

6), match='\n'>

(3)通用字元作為原子

通用字元,即乙個原子可以匹配到一類字元,而不僅僅是乙個,常見字元及其含義如下:

符號含義

\w匹配任意乙個字母、數字、下劃線

\w匹配除字母、數字、下劃線以外的任意乙個字元

\d匹配任意乙個十進位制數

\d匹配任意乙個除十進位制數以外的任意乙個字元

\s匹配任意乙個空白字元

\s匹配除空白字元以外的任意乙個其他字元

舉例:

import re

pattern="\w\dpython\w"

string="asdasfda234python2e"

result=re.search(pattern,string)

print(result)

結果如下:

<_sre.sre_match

object; span=(9,

18), match='34python2'>

(4)原子表

使用原子表,可以定義一組地位平等的原子,在匹配的時候回取該原子表的任意乙個原子進行匹配,原子表使用表示,例如[xyz]定義了三個原子x、y、z,地位平等

另外[^xyz]表示出了裡面的原子均可匹配

元字元,是正規表示式中具有特殊含義的字元,常見元字元如下:

符號含義

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

^匹配字串的開始位置

$匹配字串的結束位置

*匹配0次、1次或多次前面的原子

?匹配0次或1次前面的原子

+匹配1次或多次前面的原子

前面的原子恰好出現n次

前面的原子至少出現n次

前面的原子至少出現n次,至多出現m次

|模式選擇符

()模式單元符

具體來說,元字元分為:任意匹配元字元、邊界限制元字元、限定符、模式選擇符、模式單元符

模式修正符,可以在不改變正規表示式的情況下,改變正規表示式的含義,實現對匹配結果的調整,比如可以讓在匹配時不區分大小寫等

常見模式修正符如下

符號含義

i忽略大小寫

m多行匹配

l做本地化識別匹配

u根據unicode字符集解析字元

s讓.匹配包括換行符

貪婪模式進行盡可能多的匹配。而懶惰模式盡可能少的匹配

舉例:

import re

pattern1="p.*y"#貪婪模式

pattern2="p.*?y"#懶惰模式

string="pythony"

result1=re.search(pattern1,string)

result2=re.search(pattern2,string)

print(result1)

print(result2)

結果如下:

<_sre.sre_match

object; span=(0,

7), match='pythony'>

<_sre.sre_match

object; span=(0,

2), match='py'>

也就是乙個「?」元字元的區別,因為?有0或1個的限制,所以可以成為懶惰模式

用於從起始位置開始匹配乙個模式

函式原型:re.match(pattern,string,flag)

- pattern:正規表示式

- string:源字元

- flag:可以用來放模式修正符資訊

可以使用.span()只保留匹配的位置資訊

函式原型 :re.search(pattern,string)

- pattern:正規表示式

- string:匹配的源字元

前面的函式,即使有多個結果符合模式,也只會給出最先匹配到的結果,要想得到所有的匹配結果,需要以下步驟:

(1)使用re.compile()對正規表示式進行預編譯

(2)編譯後,使用findall()根據正規表示式,得到所有的匹配結果

舉例:

import re

pattern="python"

string="pythonpython"

pattern=re.compile(pattern)

result=pattern.findall(string)

print(result)

輸出結果:

['python', 'python']
使用re.sub()函式可以實現使用正規表示式替換某些字元

函式原型 :re.sub(pattern,rep,string,max)

- pattern:匹配的正規表示式

- rep:要替換的字串

- string:源字串

- max:可選,代表最多替換次數

舉例:

import re

pattern="python"

string="pythonpython"

pattern=re.compile(pattern)

result=re.sub(pattern,"py",string)

print(result)

結果為:

pypy
而**:

import re

pattern="python"

string="pythonpython"

pattern=re.compile(pattern)

result=re.sub(pattern,"py",string,1)

print(result)

的結果為:

pypython

基本正規表示式

匹配除了換行符以外的任意字元 w 匹配字母或數字或下劃線或漢字 字母大寫即反義 不匹配 s 匹配任意的空白符 字母大寫即反義 不匹配 d 匹配數字 字母大寫即反義 不匹配 b 匹配單詞的開始或結束 字母大寫即反義 不匹配 匹配字串的開始 匹配字串的結束 x 匹配除了x以外的任意字元 aeiou 匹配...

正規表示式 基本

字元 d任意乙個數字,0 9中任意乙個 d任意非數字 w任意乙個字母 下劃線 數字。即 a z a z 0 9 w表示除 0 9a za z 之外的字元 s匹配任何空白字元,包括空格 製表符 換頁符等等。等價於 f n r t v s匹配任何非空白字元。匹配任意乙個字元 如要匹配包括 n在內的所有字...

正規表示式的基本使用

雖說正規表示式在我們真正的專案開發過程中,大多數都是直接去查資料,但是對於一些正規表示式的基礎知識還是十分有必要了解的。比如讀懂乙個正規表示式,還有面試的時候很可能會被問到。1 學習 2 教程什麼的看的太煩了,而且還有些東西並不是很實用,下面花10分鐘就可以掌握實用的 基礎的正規表示式了。當然,這些...