正則表達式
正則表達式是對字符串操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。html
正則表達式是用來匹配字符串很是強大的工具,在其餘編程語言中一樣有正則表達式的概念,Python一樣不例外,利用了正則表達式,咱們想要從返回的頁面內容提取出咱們想要的內容就易如反掌了。python
正則表達式的大體匹配過程是:
1.依次拿出表達式和文本中的字符比較,
2.若是每個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
3.若是表達式中有量詞或邊界,這個過程會稍微有一些不一樣。正則表達式
符號 | 說明 | 實例 |
---|---|---|
. | 表示任意字符,若是說指定了 DOTALL 的標識,就表示包括新行在內的全部字符。 | 'abc' >>>'a.c' >>>結果爲:'abc' |
^ | 表示字符串開頭。 | 'abc' >>>'^abc' >>>結果爲:'abc' |
$ | 表示字符串結尾。 | 'abc' >>>'abc$' >>>結果爲:'abc' |
*, +, ? | '*'表示匹配前一個字符重複 0 次到無限次,'+'表示匹配前一個字符重複 1次到無限次,'?'表示匹配前一個字符重複 0 次到1次 | 'abcccd' >>>'abc*' >>>結果爲:'abccc'編程 'abcccd' >>>'abc+' >>>結果爲:'abccc'編程語言 'abcccd' >>>'abc?' >>>結果爲:'abc'函數 |
*?, +?, ?? | 前面的*,+,?等都是貪婪匹配,也就是儘量多匹配,後面加?號使其變成惰性匹配即非貪婪匹配 | 'abc' >>>'abc*?' >>>結果爲:'ab'工具 'abc' >>>'abc??' >>>結果爲:'ab'post 'abc' >>>'abc+?' >>>結果爲:'abc'url |
{m} | 匹配前一個字符 m 次 | 'abcccd' >>>'abc{3}d' >>>結果爲:'abcccd' |
{m,n} | 匹配前一個字符 m 到 n 次 | 'abcccd' >>> 'abc{2,3}d' >>>結果爲:'abcccd' |
{m,n}? | 匹配前一個字符 m 到 n 次,而且取儘量少的狀況 | 'abccc' >>> 'abc{2,3}?' >>>結果爲:'abcc' |
\ | 對特殊字符進行轉義,或者是指定特殊序列 | 'a.c' >>>'a\.c' >>> 結果爲: 'a.c' |
[] | 表示一個字符集,全部特殊字符在其都失去特殊意義,只有: ^ - ] \ 含有特殊含義 | 'abcd' >>>'a[bc]' >>>結果爲:'ab' |
| | 或者,只匹配其中一個表達式 ,若是|沒有被包括在()中,則它的範圍是整個正則表達式 | 'abcd' >>>'abc|acd' >>>結果爲:'abc' |
( … ) | 被括起來的表達式做爲一個分組. findall 在有組的狀況下只顯示組的內容 | 'a123d' >>>'a(123)d' >>>結果爲:'123' |
(?#...) | 註釋,忽略括號內的內容 特殊構建不做爲分組 | 'abc123' >>>'abc(?#fasd)123' >>>結果爲:'abc123' |
(?= … ) | 表達式’…’以前的字符串,特殊構建不做爲分組 | 在字符串’ pythonretest ’中 (?=test) 會匹配’ pythonre ’ |
(?!...) | 後面不跟表達式’…’的字符串,特殊構建不做爲分組 | 若是’ pythonre ’後面不是字符串’ test ’,那麼 (?!test) 會匹配’ pythonre ’ |
(?<= … ) | 跟在表達式’…’後面的字符串符合括號以後的正則表達式,特殊構建不做爲分組 | 正則表達式’ (?<=abc)def ’會在’ abcdef ’中匹配’ def ’ |
(?:) | 取消優先打印分組的內容 | 'abc' >>>'(?:a)(b)' >>>結果爲'[b]' |
?P<> | 指定Key | 'abc' >>>'(?P<n1>a)>>>結果爲:groupdict{n1:a} |
正則表達式特殊序列
特殊表達式序列 | 說明 |
---|---|
\A | 只在字符串開頭進行匹配。 |
\b | 匹配位於開頭或者結尾的空字符串 |
\B | 匹配不位於開頭或者結尾的空字符串 |
\d | 匹配任意十進制數,至關於 [0-9] |
\D | 匹配任意非數字字符,至關於 [^0-9] |
\s | 匹配任意空白字符,至關於 [ \t\n\r\f\v] |
\S | 匹配任意非空白字符,至關於 [^ \t\n\r\f\v] |
\w | 匹配任意數字和字母,至關於 [a-zA-Z0-9_] |
\W | 匹配任意非數字和字母的字符,至關於 [^a-zA-Z0-9_] |
\Z | 只在字符串結尾進行匹配 |