python 正規表示式學習小結

2022-10-07 08:03:09 字數 4115 閱讀 1100

在python中實現正則的方式是通過re(regular expression的縮寫)模組來實現的,你可以呼叫re模組的各種方法來實現不同的功能,下面我們就來說下,在python中通過re模組可以呼叫那些方法,以及這些方法的作用都是什麼;還有就是正則的例項以及各種特殊符號的含義:

1、re.sub和replace:

sub的全拼是substitute,也就是替換的意思;既然知道是替換了,那就很容易用到例項中了,其實replace也是替換的意思,只不過它們的用法不太相同,下面用乙個例子來詳細說明下它們的異同之處:

>>> import re

>>> str1 = 'hello 111 is 222'

>>> str2 = str1.replace('111','222')

>>> print(str2)

hello 222 is 222

>>>

這是乙個簡單的例子,如果是下面這種情形,把所有的數字都換成222,那麼用replace實現起來就比較麻煩,而用re模組的sub方法實現起來就比較的簡單:(如果是更複雜的操作,程式設計客棧使用replace可能就無法實現了。)

>>> import re

>>> str1 = 'hello 123 is 456'

>>> str2 = re.sub('\d+','222',str1)

>>> print(str2)

hello 222 is 222

>>>

2、re.search()和re.match():

match: 只從字串的開始與正規表示式匹配,匹配成功返回matchobject,否則返回none.

search:將字串的所有字串嘗試與正規表示式匹配,如果所有的字串都沒有匹配成功則返回none,否則返回matchobject.

下面這個例子說明了match和search的異同點,也說明了,在實際的應用中,search用的還是比較多的:

import re

str = 'helloword,i am alex'

if not re.match('word',str):

print('cannot match')

print(re.match('hello',str1).group())

print(re.search('word',str1).group())

#顯示結果

cannot match

hello

word

3、re.split:

在python中,如果想對乙個字串進行分割的話,只需要呼叫str的split方法就可以實現,但是這個split只能根據某個字元來進行分割的操作,如果要同時指定多個字元來進行分割的話,它就無法實現了。

好在re模組也提供了split這個方法來對字串進行分割,而且這個方法更加強大,可以同時根據多個字元進行分割的操作,下面來看分別看一下str的split和re的split有什麼不同的地方:

str1 = 'helloword,i;am\nalex'

str2 = str1.split(',')

print(str2)

import re

str3 = re.split('[,|;|\n]',str1)

print(str3)

#下面是不同的輸出結果

['helloword', 'i;am\nalex']

['helloword', 'i', 'am', 'alex']

從中我們可以看出,上面說的真實性。

4、findall:

findall方法基本上都是和compile方法同時出現的,它們的用法是:

先由compile將乙個正規表示式的字串形式轉換成pattern例項,然後再使用patte例項呼叫findall方法生成match物件來獲取結果,在將它們結合的例項之前,我們先來看下正規表示式中預設的特殊字元含義:

\d 匹配任何十進位制數;它相當於類 [0-9]。

\d 匹配任何非數字字元;它相當於類 [^0-9]。

\s 匹配任何空白字元;它相當於類 [ "t"n"r"f"v]。

\s 匹配任何非空白字元;它相當於類 [^ "t"n"r"f"v]。

\w 匹配任何字母數字字元;它相當於類 [a-za-z0-9_]。

\w 匹配任何非字母數字字元;它相當於類 [^a-za-z0-9_]。

看完這幾個特殊字元的含義,我們再舉乙個例子來說明一下上面的論點:

import re

str1 = 'asdf12***ve4gb4'

pattern1 = re.compile('\d')

pattern2 = re.compile('[0-9]')

mch1 = pattern1.findall(str1)

mch2 = pattern2.findall(str1)

print('mch1:\t%s'% mch1)

print('mch2:\t%s'% mch2)

#輸出結果

mch1: ['1', '2', '4', '4']13 mch2: ['1', '2', '4', '4']

上面的兩個例項都可以很好的闡述上面的論點,而且也表明了,特殊字元\d確實跟[0-9]是一樣的,通過輸出結果就可以看出,那麼如果你不想把每個數字都拆分為乙個元素放在列表中,而是想把12整體的輸出出來,那麼你可以這樣做:(就是在\d的後面加上個+號來實現的,這裡的+號表示的是把乙個或者多個相連的十進位制數字整體輸出)

import re

str1 = 'asdf12***ve4gb4'

pattern1 = re.compile('\d+')

pattern2 = re.compile('[0-9]')

mch1 = pattern1.findall(str1)

mch2 = pattern2.findall(str1)

print('mch1:\t%s'% mch1)

print('mch2:\t%s'% mch2)

#輸出結果

mch1: ['12', '4', '4']

mch2: ['1', '2', '4', '4']

我們再舉乙個小例子,這個例子是結合特殊字元和re的sub功能實現一下把字串中所有的空格都給去掉:

import re

str1 = 'asd \tf12d vdve4gb4'

new_str = re.sub('\s*','',str)

print(new_str)

#輸出結果

asdf12dv程式設計客棧dve4gb4

5、元字元:

我們通常所說的二元字元有;2元字元:. ^ $ * + ? [ ] | ( ) \

我們首先考察的元字元是"[" 和 "]"。它們常用來指定乙個字元類別,所謂字元類別就是你想www.cppcns.com匹配的乙個字符集。字元可以單個列出,也可以用「-」號分隔的兩個給定

字元來表示乙個字元區間。例如,[abc] 將匹配"a", "b", 或 "c"中的任意乙個字元;也可以用區間[a-c]來表示同一字符集www.cppcns.com,和前者效果一致。如果你只想匹配小寫字母,那麼 re 應寫成 [a-z].元字元在類別裡並不起作用。例如,[akm$]將匹配字元"a", "k", "m", 或 "$" 中的任意乙個;"$"通常用作元字元,但在字元類別裡,其特性被除去,恢復成普通字

符。    :元字元表示字元類,在乙個字元類中,只有字元^、-、]和\有特殊含義。字元\仍然表示轉義,字元-可以定義字元範圍,字元^放在前面,表示非.(這個在上面的特殊字元示例中也有提現),

+ 匹配+號前內容1次至無限次

? 匹配?號前內容0次到1次

匹配前面的內容m次

匹配前面的內容m到n次

下面通過乙個小例子,來闡述一下上面的字元在元字元中的使用:(在下面的這個例子中,要注意的有兩點:一是在\d+後面的?號的含義,二是在匹配的前面加上了乙個字元r,其實在這個示例中,加與不加都可以顯示一樣的結果)

>>> import re

>>> print(re.findall(r"a(\d+?)","a123b"))

['1']

>>> print(re.findall(r"a(\d+)","a123b"))

['123']

>>>

本文標題: python 正規表示式學習小結

本文位址: /wangluo/re/153968.html

Python正規表示式學習小結

重複和置位字元 匹配零個或乙個在它之前的表示式 匹配在它之前的表示式一次或多次出現 匹配在它之前的表示式零次或多次出現 表示處於字串開頭 表示處於字串結尾 除換行符之外的其他任意字元 字元類和特殊序列 轉義元字元 a d 匹配a,b,c或d a d 匹配除a,b,c,d以外的任意字元 a b c 同...

Python正規表示式小結

python正規表示式總結 1.了解正規表示式 正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組成乙個 規則字串 這個 規則字串 用來表達對字串的一種過濾邏輯。正規表示式是用來匹配字串非常強大的工具,在其他程式語言中同樣有正規表示式的概念,python同...

正規表示式學習小結

常用語法表 語法 描述.匹配任何字元,除了換行符 w匹配總目,數字及下劃線 w匹配不是字母,數字及下劃線的字元 s匹配任意空白字元,等價於 t n r f s匹配任意非空字元 d匹配任意數字,等價於 0 9 d匹配任意非數字的字元 a匹配字串開頭 b匹配 乙個字邊界,即字與空格間的位置 b非字邊界匹...