python正規表示式

2021-07-09 04:35:12 字數 3946 閱讀 5075

語法

意義說明

「.」任意字元

「^」字串開始

『^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 python

import re

p = re.compile('(one|two|three)')

subn

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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...