1. 程式人生 > >學習正則表達式筆記

學習正則表達式筆記

one 符號 mat ble 多個 “.” 分組 運用 對象

1.正則表達式簡介

   正則表達式為高級的文本模式匹配,抽取,與和或形式的搜索和替換功能提供了基礎。也就是說正則表達式(RegEx)能匹配到多個字符,你就可以很容易的操作這些匹配到的字符,只要你運用正確的字符和特殊符號。

  Python中通過導入 re 模塊來支持正則表達式。

2.常見的正則表達式符號和特殊字符

  2.1符號

  

符號表示法

描述 示例

literal

匹配文本字符串的字面值 literal,即匹配原始字符 foo
re1|re2 匹配正則表達式 re1 或者 re2,中間的 | 相當於或,可以匹配兩邊的字符 foo|bar
.

匹配任何字符(除了\n 之外),點可以匹配任何值,除了換行符,空白這些都可以匹配

b.b
^ 表示匹配開始的位置,如^Dear,表示匹配從Dear開始匹配,在Dear前的字符不管 ^Dear
$ 表示匹配終止位置,如end$,表示遇到end就停止匹配,在end之後的字符就不匹配了 end$
*

表示匹配任意次數,即可以匹配0次,也可以匹配100次,如[A-Za-z0-9]*,

就表示可以匹配方括號內所有字母,數字任意次數,可以可以用來匹配電子郵件地址

[A-Za-z0-9]*
+ 表示匹配一次以上,即至少要匹配一次,如a+,表示匹配a至少一次 a+
?

表示匹配 0 次或者 1 次前面出現的正則表達式,

goo?,就表示可以匹配到goo一次或沒匹配到goo

goo?
[…] 表示匹配來自字符集的任意單一字符,在方括號中就可以 [aeiou]
{N} 表示匹配前面的正則表達式N次,如[0-9]{3} ,就表示可以,在1到9中,匹配3次 [0-9]{3}
{M,N} 表匹配 M~N 次前面出現的正則表達式,如[0-9]{5,9},就表示匹配5到9次 [0-9]{5,9}
[..x?y..] 表示匹配 x ~ y 範圍中的任意單一字符 [0-9], [A-Za-z]
[^…] 不匹配此字符集中出現的任何一個字符,包括某一範圍的字符 [^aeiou]
(…) 表示匹配封閉的正則表達式,然後另存為子組,用於分組 ([0-9]{3})?
(*|+|?|{})? 用於匹配上面頻繁出現/重復出現符號的非貪婪版本(*、+、?、{}) .*?[a-z]

  2.2 特殊字符

特殊字符

表示法

描述 示例
\d

匹配任何十進制數字,與[0-9]一致(\D 與\d 相反,不匹配任何非數值型的數字),

如\d+,表示可以匹配多個數字

\d+
\w 匹配任何字母數字字符,與[A-Za-z0-9_]相同(\W與之相反) [A-Za-z_]\w+
\s

匹配任何空格字符,與[\n\t\r\v\f]相同(\S 與之相反),

of\sthe,表示of和the之間有個空格

of\sthe
\b 匹配任何單詞邊界(\B 與之相反),如\bThe\b ,就表示僅僅匹配單詞 the \bThe\b
\N 匹配已保存的子組 N(參見上面的(…)) price: \16
\c 逐字匹配任何特殊字符 c(即,僅按照字面意義匹配,不匹配特殊含義) \., \\, \*
\A(\Z) 匹配字符串的起始(結束)(另見上面介紹的^和$) \ADear

    學會了上面的正則表達式符號和特殊字符,剩下的就是靈活組合成需要的正則表達式,多熟悉就好了。

3.正則表達式和 Python 語言

3.1 re 模塊函數和正則表達式對象的方法

  1.Python使用模塊re,來支持正則表達式,導入方法: import re

  2.使用 compile(pattern,flags = 0) 來編譯正則表達式的模式。

  3.使用 match(pattern,string,flags=0) 來匹配字符串。如果匹配成功,就返回匹配對象;如果失敗,就返回 None。

  4.使用search(pattern,string,flags=0) 來搜索需要的字符串,如果匹配成功,則返回匹 配對象;如果失敗,則返回 None 。

  5.使用findall(pattern,string [, flags] ) 來尋找所有匹配到的字符串,並返回一個匹配列表。

  6.使用find(pattern,string [, flags] ) 只會找到滿足匹配要求的第一個字符串。即只匹配最前面的一個。

3.2 常用的模塊屬性

  1.re.I、re.IGNORECASE,表示不區分大小寫的匹配。

  2.re.L、re.LOCALE,根據所使用的本地語言環境通過\w、\W、\b、\B、\s、\S 實現匹配。

  3.re.M、re.MULTILINE,^和$分別匹配目標字符串中行的起始和結尾,而不是嚴格匹配整個字符串本身的起始和結尾。

  4.re.S、rer.DOTALL,“.”(點號)通常匹配除了\n(換行符)之外的所有單個字符;該標記表示“.”(點號) 能夠匹配全部字符。

  5.re.X、re.VERBOSE,通過反斜線轉義,否則所有空格加上#(以及在該行中所有後續文字)都被忽略,除非 在一個字符類中或者允許註釋並且提高可讀性。

學習正則表達式筆記