python正規表示式

2022-08-12 13:00:18 字數 4071 閱讀 4596

**:

re模組包含對 正規表示式。本章會對re模組主要特徵和正規表示式進行介紹。

分組含義:乙個()代表要擷取的匹配到的字串的範圍,第幾個「(」代表返回結果中的索引+1

什麼是正規表示式

正規表示式是可以匹配文字片段的模式。最簡單的正規表示式就是普通字串,可以匹配其自身。換包話說,正規表示式』python』 可以匹配字串』python』 。你可以用這種匹配行為搜尋文字中的模式,並且用計算後有值併發特定模式,或都將文字進行分段。

** 萬用字元

正規表示式可以匹配多於乙個的字串,你可以使用一些特殊字元建立這類模式。比如點號(.)可以匹配任何字元。在我們用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)』

** 可選項

在子模式後面加上問號,它就變成了可選項。它可能出現在匹配字串,但並非必須的。

r』(heep://)?(www\.)?python\.org』

只能匹配下列字元:『『

『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 會根據模式的匹配項來分割字串。

>>> import re

>>> some_text = 'alpha , beta ,,,gamma delta '

>>> re.split('[,]+',some_text)

['alpha ', ' beta ', 'gamma delta ']

re. findall以列表形式返回給定模式的所有匹配項。比如,要在字串中查詢所有單詞,可以像下面這麼做:

>>> import 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']

re.sub的作用在於:使用給定的替換內容將匹配模式的子符串(最左端並且重疊子字串)替換掉。

>>> import re

>>> pat = ''

>>> text = 'dear ...'

>>> re.sub(pat, 'mr. gumby',text)

'dear mr. gumby...'

re.escape 函式,可以對字串中所有可能被解釋為正則運算子的字元進行轉義的應用函式。

如果字串很長且包含很多特殊字元,而你又不想輸入一大堆反斜線,可以使用這個函式:

>>> re.escape('www.python.org')

'www\\.python\\.org'

>>> re.escape('but where is the ambiguity?')

'but\\ where\\ is\\ the\\ ambiguity\\?'

匹配物件和組簡單來說,組就是放置在圓括號裡內的子模組,組的序號取決於它左側的括號數。組0就是整個模組,所以在下面的模式中:

『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)的形式返回給組的開始和結束位置的索引。

----------------------------

正規表示式應該是不容易理解的乙個知識點;python沒意思的基礎終於學完了。雖然學的不紮實,但大體有了個印象;後面的將會非常有意思,讀取檔案,編寫圖形視窗,連線資料庫,web程式設計....

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