Python標準庫 re 正規表示式 一

2021-07-08 19:45:04 字數 2447 閱讀 9505

[python標準庫]re——正規表示式

作用:使用形式化模式搜尋和修改文字。

python 版本:1.5 及以後版本

正規表示式(regular expression)是用一種形式化語法描述的文字匹配模式。模式被解釋為一組命令,以乙個字串作為輸入,生成乙個匹配的子集或原字串的修改版本。「正規表示式」一詞在討論中通常會簡寫為「regex」或「regexp」。表示式可以包括字面量文字匹配、重複、模式組合、分支以及其他複雜的規則。對於很多解析問題,用正規表示式解決會比建立特殊用途的詞法分析器和語法分析器更為容易。

正規表示式通常在涉及大量文字處理的應用中使用。例如,在開發人員使用的文字編輯程式中(包括 vi、emacs 和其他現代 ide)常用正規表示式作為搜尋模式。另外,正規表示式還是 unix 命令列工具的乙個不可缺少的部分,如 sed、grep 和 awk。很多程式語言都在語言語法中包括對正規表示式的支援,如 perl、ruby、awk 和 tcl。另外一些語言(如 c、c++ 和 python)則通過擴充套件庫來支援正規表示式。

有很多開源的正規表示式實現,這些實現都有一種共同的核心語法,不過對其高階特性有不同的擴充套件或修改。python 的 re 模組中使用的語法以 perl 所用正規表示式語法為基礎,並提供了一些特定於 python 的改進。

查詢文字中的模式

re 最常見的用法就是搜尋文字中的模式。search() 函式取模式和要掃瞄的文字作為輸入,如果找到這個模式則返回乙個 match 物件。如果未找到模式,search() 將返回 none。

每個 match 物件包含有關匹配性質的資訊,包括原輸入字串、使用的正規表示式,以及模式在原字串中出現的位置。

import re

pattern = 'this'

text = 'does this text match the pattern?'

match = re.search(pattern, text)

s = match.start()

e = match.end()

print 'found "%s"\nin "%s"\nfrom %d to %d ("%s")' % \

(match.re.pattern, match.string, s, e, text[s:e])

編譯表示式

re 包含一些模組級函式,用於處理作為文字字串的正規表示式,不過對於程式頻繁使用的表示式,編譯這些表示式會更為高效。compile() 函式會把乙個表示式字串轉換為乙個 regexobject。

import re

# precompile the patterns

regexes = [ re.compile(p) for p in ['this', 'that']]

text = 'does this text match the pattern?'

print 'text: %r\n' % text

for regex in regexes:

print 'seeking "%s" ->' % regex.pattern,

if regex.search(text):

print 'match!'

else:

print 'no match'

模組級函式會維護已編譯表示式的乙個快取。不過,這個快取的大小是有限的,直接使用已編譯表示式可以避免快取查詢的開銷。使用已編譯表示式的另乙個好處是,通過在載入模組時預編譯所有的表示式,可以把編譯工作轉到應用開始時,而不是當程式響應乙個使用者動作時才進行編譯。

多重匹配

到目前為止,示例模式都使用 search() 來查詢字面量文字字串的單個例項。findall() 函式會返回輸入中與模式匹配而不重疊的所有子串。

import re

text = 'abbaaabbbbaaaaa'

pattern = 'ab'

for match in re.findall(pattern, text):

print 'found "%s"' % match

這個輸入字串中有兩個 ab 例項

finditer() 會返回乙個迭代器,它將生成 match 例項,而不像 findall() 返回字串。

import re

text = 'abbaaabbbbaaaaa'

pattern = 'ab'

for match in re.finditer(pattern, text):

s = match.start()

e = match.end()

print 'found "%s" at %d:%d' % (text[s:e], s, e)

這個例子找到了 ab 的兩次出現,match 例項顯示出它們在原輸入字串中的位置。

Python標準庫01 正規表示式 re包

我將從正規表示式開始講python的標準庫。正規表示式是文書處理中常用的工具,而且不需要額外的系統知識或經驗。我們會把系統相關的包放在後面講解。正規表示式 regular expression 主要功能是從字串 string 中通過特定的模式 pattern 搜尋想要找到的內容。語法之前,我們簡介了...

Python標準庫01 正規表示式 re包

摘要 python正規表示式標準庫介紹我將從正規表示式開始講python的標準庫。正規表示式是文書處理中常用的工具,而且不需要額外的系統知識或經驗。我們會把系統相關的包放在後面講解。正規表示式 regular expression 主要功能是從字串 string 中通過特定的模式 pattern 搜...

Python標準庫01 正規表示式 re包

我將從正規表示式開始講python的標準庫。正規表示式是文書處理中常用的工具,而且不需要額外的系統知識或經驗。我們會把系統相關的包放在後面講解。正規表示式 regular expression 主要功能是從字串 string 中通過特定的模式 pattern 搜尋想要找到的內容。之前,我們簡介了字串...