Python 正規表示式

2021-08-03 20:07:09 字數 3329 閱讀 7934

表 1-1 常見正規表示式符號和特殊字元

表示法描述

正規表示式示例

符號literal

匹配文字字串的字面值 literal

foore1|re2

匹配正規表示式 re1 或者 re2

foo|bar

.匹配任何字元(除了\n之外)

b.b^

匹配字串起始部分

^dear

$匹配字串終止部分

/bin/*sh$

*匹配0次或者多次前面出現的正規表示式

[a-za-z0-9]*

+匹配1次或者多次前面出現的正規表示式

[a-z]+\.com

?匹配0次或者1次前面出現的正規表示式

goo?

匹配n次前面出現的正規表示式

[0-9]

匹配m~n次前面出現的正規表示式

[0-9]

[...]

匹配來自字符集的任意單一字元

[aeiou]

[..x-y..]

匹配x~y範圍中的任意單一字元

[0-9],[a-za-z]

[^...]

不匹配此字符集中出現的任何乙個字元,包括某一範圍的字元

[^aeiou],[^0-9]

(*|+|?|{})?

用於匹配上面頻繁出現/重複出現符號的非貪婪版本

.*?[a-z]

(...)

匹配封閉的正規表示式,然後另存為子組

([0-9])?

特殊字元

\d匹配任何十進位制數字,與[0-9]一致(\d與\d相反)

data\d+.txt

\w匹配任何字母數字字元,與[a-za-z0-9]相同(\w與之相反)

[a-za-z_]\w+

\s匹配任何空白字元,與[\n\t\r\v\f]相同(\s與之相反)

of\sthe

\b匹配任何單詞邊界(\b與之相反)

\bthe\b

\n匹配已儲存的子組

price:\15

\c逐字匹配任何特殊字元c(即,僅按照字面意義匹配,不匹配特殊含義)

\*,\?

\a(\z)

匹配字串的起始(結束)(與上面的^和$相同)

\adear

\b和\b的使用場景:

正規表示式模式

匹配的字串

the任何包含the的字串

\bthe

任何以the開始的字串

\bthe\b

僅僅匹配單詞the

\bthe

任何包含但並不以the作為起始的字串

正規表示式和python語言:

表1-2列出了來自re模組的更多常見函式和方法。本節主要介紹兩個主要的函式/方法---match()和search(),以及compile()函式。

函式/方法

描述僅僅是re模組函式

compile(pattern,flags = 0)

使用任何可選的標記來編譯正規表示式的模式,然後返回乙個正規表示式物件

re模組函式和正規表示式物件的方法

match(pattern,string,flags=0)

嘗試使用帶有可選的標記的正規表示式的模式來匹配字串。如果匹配成功就返回匹配

物件;如果失敗,就返回none

search(pattern,string,fags=0)

使用可選標記搜尋字串中第一次出現的正規表示式模式。如果匹配成功則返回匹配

物件;如果失敗,則返回none

findall(pattern,string [,flags] )

查詢字串中所有(非重複)出現的正規表示式模式,並返回乙個匹配列表

finditer(pattern,string [,flags])

與findall()函式相同,但返回的不是乙個列表,而是乙個迭代器。對於每一次匹配,迭代

器都會返回乙個匹配物件

split(pattern, string, max=0)

根據正規表示式的模式分隔符,split函式將字串分割為列表,然後返回成功匹配的列表

分隔最多操作max次(預設分隔所有匹配成功的位置)

re模組函式和正規表示式物件方法

sub(pattern,repl, string , count = 0)

使用repl替換所有正規表示式的模式再字串中出現的位置,除非定義count,否則就將

替換所有出現的位置(另見subn()函式,該函式返回替換操作的數目)

purge()

清除隱式編譯的正規表示式模式

常用的匹配物件方法

group(num=0)

返回整個匹配物件,或者編號為num的特定子組

groups(default=none)

返回乙個包含所有匹配子組的元組(如果沒有匹配成功,則返回乙個空元組)

groupdict(default=none)

返回乙個包含所有匹配的命名子組的字典,所有的子組名稱作為字典的鍵(如果沒有匹配

成功,則返回乙個空字典)

常用的模組屬性

re.i、re.ignorecase

不區分大小寫的匹配

re.l、re.local

根據所使用的本地語言環境通過\w、\w、\b、\s、\s實現匹配

re.m、re.multiline

^和$分別匹配目標字串中行的起始和結尾,而不是嚴格匹配整個字串本身的起始和

結尾re.s、re.dotall

"."(點號)通常匹配除了\n之外的所有單個字元;該標記表示"."能夠匹配全部字元

re.x、re.verbose

通過反斜線轉義,否則所有空格加上#(以及在該行中所有後續文字)都將被忽略,除

非在乙個字元類中或者允許注釋並且提高可讀性

在模式匹配發生之前,正規表示式模式必須編譯成正規表示式物件。由於正規表示式在執行過程中將進行多次比較操作,因此強烈建議使用預編譯。而且正規表示式的編譯是必須的,那麼使用預編譯來提公升執行效能無疑是明智之舉。re.compile()能夠提供次功能

使用compile()函式編譯正規表示式

如果需要編譯,就使用編譯過的方法;如果不需要編譯,就使用函式。幸運的是,不管使用函式還是方法,它們的名字都是相同的(也許你曾對此感到好奇,這就是模組函式和方法的名字相同的原因,例如search()、match()等)。

匹配物件以及group()和groups()方法

當處理正規表示式時,除了正規表示式物件之外,還有另乙個物件型別:匹配物件。這些是成功呼叫match()或者search()返回的物件。匹配物件有兩個主要的方法:group()和groups()。

group()要麼返回整個匹配物件,要麼根據要求返回特定子組。

python正規表示式元字元 正規表示式

字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

Python 正規表示式

1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...

Python正規表示式

學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...