語法
意義說明
「.」任意字元
「^」字串開始
『^hello』匹配』helloworld』而不匹 配』aaaahellobbb』
「$」字串結尾
與上同理
「*」0 個或多個字元(貪婪匹配)
<*>匹配chinaunix
「+」1 個或多個字元(貪婪匹配)
與上同理
「?」0 個或多個字元(貪婪匹配)
與上同理
*?,+?,??
以上三個取第乙個匹配結果(非貪婪匹配)
<*>匹配
對於前乙個字元重複m到n次,亦可
a匹配6個a、a匹配2到4個a
?對於前乙個字元重複m到n次,並取盡可能少
『aaaaaa』中a只會匹配2個
「\\」
特殊字元轉義或者特殊序列
表示乙個字符集
[0-9]、[a-z]、[a-z]、[^0]
「|」或
a|b,或運算
(…)匹配括號中任意表示式
(?#…)
注釋,可忽略
(?=…)
matches if … matches next, but doesn』t consume the string.
『(?=test)』 在hellotest中匹配hello
(?!…)
matches if … doesn』t match next.
『(?!=test)』 若hello後面不為test,匹配hello
(?<=…)
matches if preceded by … (must be fixed length).
『(?<=hello)test』 在hellotest中匹配test
(?matches if not preceded by … (must be fixed length).
『(? 字元
描述\a
只匹配字串的開始
\b匹配乙個單詞邊界
\b匹配乙個單詞的非邊界
\d匹配任意十進位制數字字元,等價於r』[0-9]』
\d匹配任意非十進位制數字字元,等價於r』[^0-9]』
\s匹配任意空格字元(空格符、tab製表符、換行符、回車、換頁符、垂直線符號)
\s匹配任意非空格字元
\w匹配任意字母數字字元
\w匹配任意非字母數字字元
\z僅匹配字串的尾部
\\匹配反斜線字元
#!/usr/bin/env python
import re
r1 = re.compile(r'world')
if r1.match('helloworld'):
print
'match succeeds'
else:
print
'match fails'
if r1.search('helloworld'):
print
'search succeeds'
else:
print
'search fails'
說明一下:r是raw(原始)的意思。因為在表示字串中有一些轉義符,如表示回車』\n』。如果要表示\表需要寫為』\』。但如果我就是需要表示乙個』\』+』n』,不用r方式要寫為:』\n』。但使用r方式則為r』\n』這樣清晰多了。
例:設定flag
#r2 = re.compile(r'n$', re.s)
#r2 = re.compile('\n$', re.s)
r2 = re.compile('world$', re.i)
if r2.search('helloworld\n'):
print
'search succeeds'
else:
print
'search fails'
例:直接呼叫
if re.search(r'abc','helloaaabcdworldn'):
print
'search succeeds'
else:
print
'search fails'
split
re.split(pattern, string[, maxsplit=0, flags=0])
split(string[, maxsplit=0])
作用:可以將字串匹配正規表示式的部分割開並返回乙個列表
例:簡單分析ip
#!/usr/bin/env python
import re
r1 = re.compile('w+')
print r1.split('192.168.1.1')
print re.split('(w+)', '192.168.1.1')
print re.split('(w+)', '192.168.1.1', 1)
結果如下:
[『192』, 『168』, 『1』, 『1』]
[『192』, 『.』, 『168』, 『.』, 『1』, 『.』, 『1』]
[『192』, 『.』, 『168.1.1』]
findall
re.findall(pattern, string[, flags])
findall(string[, pos[, endpos]])
作用:在字串中找到正規表示式所匹配的所有子串,並組成乙個列表返回
例:查詢包括的內容(貪婪和非貪婪查詢)
#!/usr/bin/env python
import re
r1 = re.compile('([.*])')
print re.findall(r1, "hello[hi]heldfsdsf[iwonder]lo")
r1 = re.compile('([.*?])')
print re.findall(r1, "hello[hi]heldfsdsf[iwonder]lo")
print re.findall('[0-9]',"fdskfj1323jfkdj")
print re.findall('([0-9][a-z])',"fdskfj1323jfkdj")
print re.findall('(?=www)',"afdsfwwwfkdjfsdfsdwww")
print re.findall('(?<=www)',"afdsfwwwfkdjfsdfsdwww")
finditer
re.finditer(pattern, string[, flags])
finditer(string[, pos[, endpos]])
說明:和 findall 類似,在字串中找到正規表示式所匹配的所有子串,並組成乙個迭代器返回。同樣 regexobject 有:
sub
re.sub(pattern, repl, string[, count, flags])
sub(repl, string[, count=0])
說明:在字串 string 中找到匹配正規表示式 pattern 的所有子串,用另乙個字串 repl 進行替換。如果沒有找到匹配 pattern 的串,則返回未被修改的 string。repl 既可以是字串也可以是乙個函式。
例:
#!/usr/bin/env pythonsubnimport re
p = re.compile('(one|two|three)')
re.subn(pattern, repl, string[, count, flags])
subn(repl, string[, count=0])
說明:該函式的功能和 sub() 相同,但它還返回新的字串以及替換的次數。
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...
Python 正規表示式
1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...
Python正規表示式
學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...