注釋:使用re之前,要導入re庫文件。
(1). :匹配任意字符,換行符 \n 除外;每個 . 表示一個占位符。
例子:
a = 'xy123'
b = re.findall('x..',a)
print b
輸出結果:
(2)*:匹配前一個字符的0次或無限次。
例子:
a = 'xxyxy123'
b = re.findall('x*',a)
print b
輸出結果為:
(3)? :匹配前一個字符0次或1次。
例子:
a = 'xxyxy123'
b = re.findall('xy?',a)
print b
輸出結果:
(4).* :貪心算法,盡可能的匹配多的字符。
例子:
secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
b = re.findall('xx.*xx',secret_code)
print b
輸出結果如下:
(5).*? :非貪心算法。
例子:
secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
c = re.findall('xx.*?xx',secret_code)
print c
輸出結果如下:
(6)() :括號內的數據作為結果返回。
例子:
secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
d = re.findall('xx(.*?)xx',secret_code)
print d
輸出結果:
(7) re.S的使用舉例。在Python的正則表達式中,有一個參數為re.S。它表示“.”(不包含外側雙引號,下同)的作用擴展到整個字符串,包括“\n”。看如下代碼:
import re
a = '''asdfsafhellopass:
234455
worldafdsf
'''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c
輸出結果如下:
正則表達式中,“.”的作用是匹配除“\n”以外的任何字符,也就是說,它是在一行中進行匹配。這里的“行”是以“\n”進行區分的。a字符串有每行的末尾有一個“\n”,不過它不可見。
如果不使用re.S參數,則只在每一行內進行匹配,如果一行沒有,就換下一行重新開始,不會跨行。而使用re.S參數以后,正則表達式會將這個字符串作為一個整體,將“\n”當做一個普通的字符加入到這個字符串中,在整體中進行匹配。
(8)
re.findall(pattern, string[, flags]):搜索string,以列表形式返回全部能匹配的子串。
例子1:
pattern = re.compile(r'\d+')
print re.findall(pattern,'one1two2three3four4')
輸出結果為:
例子2:
s2 = 'asdfxxIxx123xxlovexxdfd'
f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
print f2
print f2[0]
輸出結果為:
(9) search的使用舉例
例子:
s2 = 'asdfxxIxx123xxlovexxdfd'
f = re.search('xx(.*?)xx123xx(.*?)xx',s2)
print f.group()
print f.group(0)
print f.group(1)
print f.group(2)
print f.group(1,2)
print f.groups()
輸出結果為:
group([group1, …]):
獲得一個或多個分組截獲的字符串;指定多個參數時將以元組形式返回。group1可以使用編號也可以使用別名;編號0代表整個匹配的子串;不填寫參數時,返回group(0);沒有截獲字符串的組返回None;截獲了多次的組返回最后一次截獲的子串。
groups([default]):
以元組形式返回全部分組截獲的字符串。相當於調用group(1,2,…last)。default表示沒有截獲字符串的組以這個值替代,默認為None。
(10) \d 的使用舉例,\d用於匹配數字;\d+ 可以匹配數字字符串。
例子:
a = 'asdfasf1234567fasd555fas'
b = re.findall('(\d+)',a)
print b
輸出結果:
(11)sub()方法