萬用字元
正規表示式可以匹配多於乙個的字串,可以使用一些特殊字元建立這類模式。比如點號(.
)可以匹配任何字元。在我們用
window
搜尋時用問號(?)匹配任意一位字元,作用是一樣的。那麼這類符號就叫萬用字元。
對特殊字元進行轉義
通過上面的方法,假如我們要匹配「python.org
」,直接用用『
python.org
』可以麼?這麼做可以,但這樣也會匹配「
pythonzorg
」,這可不是所期望的結果。
我們需要對它進行轉義,可以在它前面加上雙斜線。因此,本例中可以使用「python\\.org
」,這樣就只會匹配「
python.org
」了。
字符集
我們可以使用中括號([ ]
)括住字串來建立字符集。可以使用範圍,比如『
[a-z]
』能夠匹配a到
z的任意乙個字元,還可以通過乙個接乙個的方式將範圍聯合起來使用,比如『
[a-za-z0-9]
』能夠匹配任意大小寫字母和數字。
反轉字符集,可以在開頭使用^
字元,比如『
[^abc]
』可以匹配任何除了a、
b、c之外的字元。
選擇符
有時候只想匹配字串』python』 和 』perl』 ,可以使用選擇項的特殊字元:管道符號(|
) 。因此, 所需模式可以寫成』python|perl』 。
子模式
但是,有些時候不需要對整個模式使用選擇符---
只是模式的一部分。這時可以使用圓括號起需要的部分,或稱子模式。 前例可以寫成 『p(ython | erl)』
可選項
在子模式後面加上問號,它就變成了可選項。它可能出現在匹配字串,但並非必須的。
只能匹配下列字元:『『
『www.python.org』
『python.org』
重複子模式
(pattern)* : 允許模式重複
0次或多次
(pattern)+ : 允許模式重複
1次或多次
(pattern) : 允許模式重複
m~ n 次
例如:r』w * \.python\.org』 匹配 『www.python.org』 、』.python.org』 、』wwwwwww.python.org』
r』w + \.python\.org』 匹配 『w.python.org』 ;但不能匹配 』.python.org』
r』w \.python\.org』 只能匹配『www.python.org』 和『wwww.python.org』
re模組的內容
re模組中一些重要的函式:
re.compile 將正規表示式轉換為模式物件,可以實現更有效率的匹配。
re.search 會在給定字串中尋找第乙個匹配給正則表式的子字串。找到函式返回
matchobject(
值為true)
,否則返回
none(
值為false)
。因為返回值的性質,所以該函式可以用在條件語句中:
if re.serch(pat, string):
print 『found it !』
re.math 會在給定字串的開頭匹配正規表示式。因此,
re.math(『p』 , 『python』)返回真,
re.math(『p』 , 『www.python』) 則返回假。
re.split 會根據模式的匹配項來分割字串。
>>> importre. findall以列表形式返回給定模式的所有匹配項。比如,要在字串中查詢所有單詞,可以像下面這麼做:re>>> some_text = '
alpha , beta ,,,gamma delta
'>>> re.split('
[,]+
',some_text)['
alpha
', '
beta
', '
gamma delta
']
>>> importre.sub的作用在於:使用給定的替換內容將匹配模式的子符串(最左端並且重疊子字串)替換掉。re>>> pat = '
[a-za-z]+
'>>> text = '
"hm...err -- are you sure?" he said, sounding insecure.
'>>>re.findall(pat,text)['
hm', '
err', '
are', '
you', '
sure
', '
he', '
said
', '
sounding
', '
insecure
']
>>> importre.escape 函式,可以對字串中所有可能被解釋為正則運算子的字元進行轉義的應用函式。re>>> pat = '
'>>> text = '
dear ...
'>>> re.sub(pat, '
mr. gumby
',text)
'dear mr. gumby...
'
如果字串很長且包含很多特殊字元,而你又不想輸入一大堆反斜線,可以使用這個函式:
>>> re.escape('匹配物件和組簡單來說,組就是放置在圓括號裡內的子模組,組的序號取決於它左側的括號數。組0www.python.org')
'www\\.python\\.org
'>>> re.escape('
but where is the ambiguity?')
'but\\ where\\ is\\ the\\ ambiguity\\?
'
就是整個模組,所以在下面的模式中:
『there (was a (wee) (cooper)) who (lived in fyfe)』
包含組有:
0 there was a wee cooper who lived in fyfe
1 was a wee cooper
2 wee
3 cooper
4 lived in fyfe
re 匹配物件的重要方法
下面看例項:
>>> import re
>>> m = re.match(r'www\.(.*)\..','www.python.org')
>>> m.group()
'www.python.org'
>>> m.group(0)
'www.python.org'
>>> m.group(1)
'python'
>>> m.start(1)
4>>> m.end(1)
10>>> m.span(1)
(4, 10)
group方法返回模式中與給定組匹配的字串,如果沒有組號,預設為
0 ;如上面:m.group()==m.group(0) ;如果給定乙個組號,會返回單個字串。
start 方法返回給定組匹配項的開始索引,
end方法返回給定組匹配項的結束索引加1;
span以元組(
start
,end
)的形式返回給組的開始和結束位置的索引。
元字元的列表: .
^$ *+
? ,其中 m 和 n 是十進位制整數。該限定符的意思是至少有 m 個重複,至多到 n 個重複。舉個例子,a/b 將匹配 "a/b","a//b" 和 "a///b"。它不能匹配 "ab" 因為沒有斜槓,也不能匹配 "ab" ,因為有四個。
部分正規表示式
d 非負整數 正整數 0 0 9 1 9 0 9 正整數 d 0 非正整數 負整數 0 0 9 1 9 0 9 負整數 d 整數 d d 非負浮點數 正浮點數 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 正浮點數 d d 0 0 非正浮點數 負浮點數 ...
正規表示式部分
正規表示式是用來匹配字串的強有力 在正規表示式中,如果直接給出字元,就是精確匹配。用 d可以匹配乙個數字,w可以匹配乙個字母或者數字。要匹配變長的字元,用?表示0個或1個字元,用表示n個字元,用表示n m個字元,等等。要更精確的匹配,可以用表示範圍,比如 a b 可以匹配a或b,表示行的開頭,d 表...
正規表示式部分整理
一 校驗數字的表示式 數字 0 9 n位的數字 d 至少n位的數字 d m n位的數字 d 零和非零開頭的數字 0 1 9 0 9 非零開頭的最多帶兩位小數的數字 1 9 0 9 0 9 帶1 2位小數的正數或負數 d d 正數 負數 和小數 d d 有兩位小數的正實數 0 9 0 9 有1 3位小...