python之正則表示式:re模組
阿新 • • 發佈:2018-12-04
一.正則表示式中常用的字元含義
1、普通字元和11個元字元:
常用字元劃分 | 匹配範圍 | 示例資料 | |
匹配的正則表示式 | 目標匹配的字串 | ||
普通字元 | 匹配自身 | abc | abc |
. | 匹配任意除換行符"\n"外的字元(在DOTALL模式中也能匹配換行符 | a.c | abc |
\ | 轉義字元,使後一個字元改變原來的意思 | a\.c;a\\c | a.c;a\c |
* |
匹配前一個字元0或多次 | abc* | ab;abccc |
.+ | 匹配前一個字元1次或無限次 | abc+ | abc;abccc |
? | 匹配一個字元0次或1次 | abc? | ab;abc |
^ | 匹配字串開頭。在多行模式中匹配每一行的開頭 | ^abc | abc |
$ | 匹配字串末尾,在多行模式中匹配每一行的末尾 | abc$ | abc |
| | 或。匹配|左右表示式任意一個,從左到右匹配,如果|沒有包括在()中,則它的範圍是整個正則表示式 |
abc|def | abcdef |
{} | {m}匹配前一個字元m次,{m,n}匹配前一個字元m至n次,若省略n,則匹配m至無限次 | ab{1,2}c | abcabbc |
[] | 字符集。對應的位置可以是字符集中任意字元。字符集中的字元可以逐個列出,也可以給出範圍,如[abc]或[a-c]。[^abc]表示取反,即非abc。 所有特殊字元在字符集中都失去其原有的特殊含義。用\反斜槓轉義恢復特殊字元的特殊含義。 |
a[bcd]e | abe ace ade |
() |
被括起來的表示式將作為分組,從表示式左邊開始沒遇到一個分組的左括號“(”,編號+1. 分組表示式作為一個整體,可以後接數量詞。表示式中的|僅在該組中有效。 |
(abc){2}a(123|456)c | abcabca456c |
強調一下反斜槓\的作用:
1.反斜槓後邊跟元字元去除特殊功能;(即將特殊字元轉義成普通字元)
2.反斜槓後邊跟普通字元實現特殊功能;(即預定義字元)
3.引用序號對應的字組所匹配的字串。
二、預定義字符集(可以寫在字符集[...]中)
預定義字符集劃分 | 匹配範圍 | 示例資料 | |
匹配的正則表示式 | 目標匹配的字串 | ||
\d | 數字:[0-9] | a\bc | a1c |
\D | 非數字:[^\d] | a\Dc | abc |
\s | 匹配任何空白字元:[<空格>\t\r\n\f\v] | a\sc | a c |
\S | 非空白字元:[^\s] | a\Sc | abc |
\w | 匹配包括下劃線在內的任何字字元:[A-Za-z0-9_] | a\wc | abc |
\W | 匹配非字母字元,即匹配特殊字元 | a\Wc | a c |
\A | 僅匹配字串開頭,同^ | \Aabc | abc |
\Z | 僅匹配字串結尾,同$ | abc\Z | abc |
\b | 匹配\w和\W之間,即匹配單詞邊界匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 | \babc\b | 空格abc空格 |
a\b!bc | a!bc | ||
\B | [^\b] | a\Bbc | abc |
三、特殊分組用法:
特殊分組劃分 | 匹配範圍 | 示例資料 | |
匹配的正則表示式 | 目標匹配的字串 | ||
(?P<name>) | 分組,除了原有的編號外再指定一個額外的別名 | (?P<id>abc){2} | abcabc |
(?P=name) | 引用別名為<name>的分組匹配到字串 | (?P<id>\d)abc(?P=id) | 1abc15abc5 |
\<number> | 引用編號為<number>的分組匹配到字串 | (\d)abc\1 | 1abc15abc5 |