表 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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...