正規表示式

2021-09-19 10:41:48 字數 3812 閱讀 8173

什麼是正規表示式

正規表示式是可以匹配文字片段的模式。最簡單的正規表示式就是普通字串,可以匹配其自身。換包話說,正規表示式』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.match 會在給定字串的開頭匹配正規表示式。因此,re.match(『p』 , 『python』)返回真,re.match(『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 匹配物件的重要方法

下面看例項:

group()方法匹配的整個表示式的字串,group() 可以一次輸入多個組號,在這種情況下它將返回乙個包含那些組所對應值的元組。

>>> 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)

start 方法返回給定組匹配項的開始索引,

end方法返回給定組匹配項的結束索引加1;

span以元組(start,end)的形式返回給組的開始和結束位置的索引。

引入自:

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 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 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...