- 論壇徽章:
- 0
|
本帖最后由 中關(guān)村村草 于 2011-02-10 10:28 編輯
轉(zhuǎn):blue_halo
python中的正則
概括:
python使用re正則模塊來實(shí)現(xiàn)正則表達(dá)式,import re。
元字符含義:
一、字符串里含有什么字符
1、首先確定一下元字符(不是代表字面意思的字符)有哪些。
\ 代表轉(zhuǎn)義
| 代表分支選擇
( ) 代表捕捉
[ ] 代表字符數(shù)組
] 比較特殊,只有前面有相應(yīng)的[ 和 { 時(shí),才會(huì)是元字符,否則就是普通字符 。()沒有使用此規(guī)則
^ $ #行首,行尾
* + ? #代表數(shù)量
. #代表任意字符
2、單個(gè)字符的描述
除了在上面提到的元字符,想要匹配什么字符直接寫就可以了,例如'a' 匹配 正則表達(dá)式 a。
而要想匹配元字符本身只需要在前面加上轉(zhuǎn)義字符(\)就可以了。
3、非打印字符及某類字符 的表示
非打印字符和標(biāo)準(zhǔn)的基本一直,列舉如下:
\d 匹配任何數(shù)字,等同于[0-9],注意這里的-只有在字符數(shù)組里才是元字符 。
\D 匹配任何非數(shù)字,等同于[^0-9]。
\s 匹配任何空白字符,等同于[\f\t\n\r ]
\S 匹配任何非空白字符,等同于[^\f\t\n\r ]
\t 匹配tab
\w 匹配任何字母數(shù)字或者下劃線
\W 匹配上面以外的
二、字符串的位置
1、基本位置描述符
^ 匹配字符串的起始位置
\A 匹配字符串的起始位置
$ 匹配字符串結(jié)束位置。
\Z 匹配字符串的結(jié)束位置。
\b 匹配單詞邊界。
(?#) 注釋
(?=) 匹配一個(gè)正則位置
(?!) 不匹配一個(gè)正則位置
三、字符串里字符的數(shù)量
* 0次或者多次 (盡可能的多匹配)
? 0次或者1次 (盡可能的多匹配)
+ 1次或者多次 (盡可能的多匹配)
{n} n次
{m,n} m次到n次
{m,} m次以上 注意 {,n}是錯(cuò)誤的寫法。
在以上的數(shù)量修飾符的最后再加一個(gè)?就是盡可能的少匹配。
四、舉例
Python代碼- import re
- if re.match(r"\d+","a99b"): #match必須是從頭匹配
- print "match ok!"
- if re.search(r"\d+","a99b"):
- print "search ok!"
- print re.search(r"\d+","a99b").group() #group返回匹配的字符串
- print re.search(r"(\d+)(\w)","a99b98c").groups() #返回子組字符串
- print re.findall(r"\d+","a99b88c") #findall直接返回匹配的字符串列表
復(fù)制代碼 五、附加選項(xiàng)
Python代碼- import re
-
- if re.match(r"a","A"):
- print "test1 ok"
-
- if re.match(r"(?i)a","A"): #附加選項(xiàng)必須在正則表達(dá)式最前面(?i)代表忽略大小寫,對(duì)應(yīng)re.I
- print "test2 ok"
-
- #ma=re.compile("a",re.I)
- #if ma.match("A"):
- # print "good!"
-
- if re.search(r"^\d","abcd\n1234"): #\A,\Z只匹配字符串的開頭和結(jié)尾,不受(?m)的影響
- print "test3 ok"
-
- if re.search(r"(?m)^\d","abcd\n1234"): #每一行的開頭和結(jié)尾都認(rèn)為是字符串的開始和結(jié)尾,對(duì)應(yīng)re.M
- print "test4 ok"
-
- print re.search(r".+","abcd\nefg").group() #輸出abcd
- print re.search(r"(?s).+","abcd\nefg").group() #輸出abcd\nefg,對(duì)應(yīng)re.S
-
- if re.match(r"\w","我"):
- print "test5 ok"
-
- if re.match(r"(?u)\w","我"): #匹配unicode,對(duì)應(yīng)re.U
- print "test6 ok"
-
- #(?x),re.X 對(duì)應(yīng)可以在正則中插入空白符
- #(?L),re.L 對(duì)應(yīng)\w等匹配本地字符集
復(fù)制代碼 |
|