概括:
python使用re正則模塊來實現正則表達式,import re。
元字符含義:
一、字符串裏含有什麼字符
1、首先確定一下元字符(不是代表字面意思的字符)有哪些。
\ 代表轉義
| 代表分支選擇
( ) 代表捕捉
[ ] 代表字符數組
] 比較特殊,只有前面有相應的[ 和 { 時,纔會是元字符,否則就是普通字符。()沒有使用此規則
^ $ #行首,行尾
* + ? #代表數量
. #代表任意字符
2、單個字符的描述
除了在上面提到的元字符,想要匹配什麼字符直接寫就可以了,例如'a' 匹配 正則表達式 a。
而要想匹配元字符本身只需要在前面加上轉義字符(\)就可以了。
3、非打印字符及某類字符的表示
非打印字符和標準的基本一直,列舉如下:
\d 匹配任何數字,等同於[0-9],注意這裏的-只有在字符數組裏纔是元字符。
\D 匹配任何非數字,等同於[^0-9]。
\s 匹配任何空白字符,等同於[\f\t\n\r ]
\S 匹配任何非空白字符,等同於[^\f\t\n\r ]
\t 匹配tab
\w 匹配任何字母數字或者下劃線
\W 匹配上面以外的
二、字符串的位置
1、基本位置描述符
^ 匹配字符串的起始位置
\A 匹配字符串的起始位置
$ 匹配字符串結束位置。
\Z 匹配字符串的結束位置。
\b 匹配單詞邊界。
(?#) 註釋
(?=) 匹配一個正則位置
(?!) 不匹配一個正則位置
三、字符串裏字符的數量
* 0次或者多次 (儘可能的多匹配)
? 0次或者1次 (儘可能的多匹配)
+ 1次或者多次 (儘可能的多匹配)
{n} n次
{m,n} m次到n次
{m,} m次以上 注意 {,n}是錯誤的寫法。
在以上的數量修飾符的最後再加一個?就是儘可能的少匹配。
四、舉例
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直接返回匹配的字符串列表
print re.sub(r"\d+","num","a99b88c") #把99 和 88 都替換成num
五、附加選項
import re
if re.match(r"a","A"):
print "test1 ok"
if re.match(r"(?i)a","A"): #附加選項必須在正則表達式最前面(?i)代表忽略大小寫,對應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只匹配字符串的開頭和結尾,不受(?m)的影響
print "test3 ok"
if re.search(r"(?m)^\d","abcd\n1234"): #每一行的開頭和結尾都認爲是字符串的開始和結尾,對應re.M
print "test4 ok"
print re.search(r".+","abcd\nefg").group() #輸出abcd
print re.search(r"(?s).+","abcd\nefg").group() #輸出abcd\nefg,對應re.S
if re.match(r"\w","我"):
print "test5 ok"
if re.match(r"(?u)\w","我"): #匹配unicode,對應re.U
print "test6 ok"
#(?x),re.X 對應可以在正則中插入空白符
#(?L),re.L 對應\w等匹配本地字符集