元字符
1.匹配元字符:
. 它匹配除了換行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配換行
^ 匹配行首。除非設(shè)置 MULTILINE 標(biāo)志,它只是匹配字符串的開始。
$ 匹配行尾,行尾被定義為要么是字符串尾,要么是一個換行字符后面的任何位置。
[] 它們常用來指定一個字符類別,所謂字符類別就是你想匹配的一個字符集
\ 反斜杠后面可以加不同的字符以表示不同特殊意義。它也可以用于取消所有的元字符,這樣你就可以在模式中匹配它們了
| 可選項,或者 "or" 操作符。
() 一般情況下表示一個記憶組 (remembered group)。你可以利用 re.search 函數(shù)返回對象的 groups() 函數(shù)獲取它的值
2.重復(fù)元字符:
* 重復(fù)0或N次
+ 重復(fù)1或N次
? 重復(fù)0或1次
{m,n} 該限定符的意思是至少有 m 個重復(fù),至多到 n 個重復(fù)
3.用 "\" 開始的預(yù)定義字符集
\d 匹配任何十進(jìn)制數(shù);它相當(dāng)于類 [0-9]。
\D 匹配任何非數(shù)字字符;它相當(dāng)于類 [^0-9]。
\s 匹配任何空白字符;它相當(dāng)于類 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相當(dāng)于類 [^\t\n\r\f\v]。
\w 匹配任何字母數(shù)字字符;它相當(dāng)于類 [a-zA-Z0-9_]。
\W 匹配任何非字母數(shù)字字符;它相當(dāng)于類 [^a-zA-Z0-9_]。
\A 只匹配字符串首。當(dāng)不在 MULTILINE 模式,\A 和 ^ 實際上是一樣的。然而,在 MULTILINE 模式里它們是不同的;\A 只是匹配字符串首,而 ^ 還可以匹配在換行符之后字符串的任何位置。
\Z 只匹配字符串尾。
\b 單詞邊界。這是個零寬界定符(zero-width assertions)只用以匹配單詞的詞首和詞尾。單詞被定義為一個字母數(shù)字序列,因此詞尾就是用空白符或非字母數(shù)字符來標(biāo)示的。
\B 另一個零寬界定符(zero-width assertions),它正好同 \b 相反,只在當(dāng)前位置不在單詞邊界時匹配。
注:[akm$]將匹配字符"a", "k", "m", 或 "$" 中的任意一個;"$"通常用作元字符,但在字符類別里,其特性被除去,恢復(fù)成普通字符。
RegexObject(re)對象常用方法
matchObject=re.match(pattern,string,flag='0') :決定 RE 是否在字符串剛開始的位置匹配
matchObject=re.search(pattern,string,flag='0'):掃描字符串,找到這個 RE 匹配的位置
tuple=re.findall(pattern,string,flag='0') : 找到 RE 匹配的所有子串,并把它們作為一個列表返回
matchObjectList=re.finditer(pattern,string):找到 RE 匹配的所有子串,并把它們作為一個迭代器返回
MatchObject對象的常用方法
findstring = matchObject.group() :返回被 RE 匹配的字符串
i = matchObject.start() :返回匹配開始的位置
i = matchObject.end() :返回匹配結(jié)束的位置
start,end = matchObject.span() :返回一個元組包含匹配 (開始,結(jié)束) 的位置
編譯標(biāo)志
DOTALL, S :使 . 匹配包括換行在內(nèi)的所有字符
IGNORECASE, I: 使匹配對大小寫不敏感
LOCALE, L :做本地化識別(locale-aware)匹配
MULTILINE, M: 多行匹配,影響 ^ 和 $
VERBOSE, X :能夠使用 REs 的 verbose 狀態(tài),使之被組織得更清晰易懂
使用心得
1.先編譯后使用:re.compile('pattern')
2.切勿重復(fù)編譯:放入全局空間或放入cell空間并實例出一個閉包實例