首頁 > 後端開發 > Python教學 > Python 中正規表示式詳解

Python 中正規表示式詳解

小云云
發布: 2017-12-18 15:05:40
原創
2050 人瀏覽過


正規表示式是用來簡潔表達一組字串的表達式,本文主要和大家分享Python 中正規表示式知識詳解,希望能幫助大家。

##. 表示任何單一字元[ ]字元集,單一字元取值範圍##[^ ][^abc]##*前一個字元的0次或無限次擴充表示+前一個字元的1次或無限次擴展表示?前一個字元的0次或1次擴充表示|左右表示任一 表示{m}前一個字元的m次擴充表示{m,n}前一個字元的m至n次擴充(含n)表示^符合字串開頭表示abc且在一個字串的開頭$匹配字串結尾表示abc並且在一個字串的結尾( )分組標記,內部只能使用|運算子表示\d數字,等價於[0-9]\w單字字符,等價於[A-Za-z0-9_]
運算子 說明 實例

[abc]表示a或b或c; [a-z]表示a到z單一字元
非字元集,單一字元排除範圍 表示非a或非b或非c
abc*ab、abc、abcc、abccc...
abc+abc、abcc、abccc...
#abc?ab、abc
#abc|defabc或def
#ab{2}abcc
ab{1, 2}abc、abcc
^abc
abc$
(abc|def )abc或def


如果熟悉上面的運算子的話,下面的例子就不難了。

1.只能輸入數字:^[0-9]*$

2.只能輸入n位的數字:^\d{n}$

3.只能輸入至少n位的數字:^\d{n,}$

4.只能輸入m~n位的數字:^\d{m,n}$

#5.只能輸入零和非零開頭的數字:^(0|[1-9][0-9]*)$

6.只能輸入有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$

7.只能輸入有1~3位小數的正實數:^[0-9]+( .[0-9]{1,3})?$

8.只能輸入非零的正整數:^+?[1-9][0-9]*$

【Python3正規表示式】


函數re.match()從字串的起始位置配對一個模式,如果起始位置符合不成功的話,match()就回傳none。 re.search()掃描整個字串並傳回第一個成功的匹配。 re.sub()用於取代字串中的所有符合正規表示式的子字串,傳回替換後的字串#re.findall()搜尋字串,以列表形式傳回全部能匹配的子字串re.split()將字串依照正規表示式比對結果切割,傳回列表#re.finditer()搜尋字串,傳回一個符合結果的迭代類型,每個迭代元素是match物件#
>>> match= re.findall(r'[1-9]\d{5}','100081BIT  BIT10008676')>>> print(match)
['100081', '100086']>>> match = re.split(r'[1-9]\d{5}','100081BIT  BIT10008676')>>> match
['', 'BIT  BIT', '76']>>> match = re.split(r'[1-9]\d{5}','100081BIT  BIT10008676',maxsplit=1)>>> match
['', 'BIT  BIT10008676']

>>>for m in re.finditer(r'[1-9]\d{5}','100081BIT  BIT10008676'):       if m:
            print(m.group(0))    
100081100086
登入後複製
登入後複製

re.match與re.search的區別

re.match只符合字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函數傳回None;而re. search匹配整個字串,直到找到一個匹配。


Python 中正規表示式詳解

[ ] #字元集,單一字元取值範圍[^ ]非字元集,單一字元排除範圍#*前一個字元的0次或無限次擴展表示+前一個字元的1次或無限次擴充表示?前一個字元的0次或1次擴充表示|#左右表示任一個 表示{m}前一個字元的m次擴充##ab{ 2}abcc{m,n}ab{1,2}##符合字串開頭#$符合字串結尾表示abc且在一個字串的結尾( )(abc|def)
運算子說明實例

##.表示任何單一字元
[abc]表示a或b或c; [a-z]表示a到z單一字元
[^abc]表示非a或非b或非c
#abc*ab、abc、abcc、abccc...
abc+abc 、abcc、abccc...
abc? ab、abc
abc|defabc或def
表示
前一個字元的m至n次擴充(含n)表示abc、abcc
#^^abc表示abc且在一個字串的開頭
abc$
#分組標記,內部只能使用|運算子表示
abc或def

#\d

##數字,等價於[0-9]

\w

單字字符,等價於[A-Za-z0-9_]


如果熟悉上面的運算子的話,下面的例子就不難了。

1.只能輸入數字:^[0-9]*$2.只能輸入n位的數字:^\d{n}$#5.只能輸入零和非零開頭的數字:^(0|[1-9][0-9]*)$6.只能輸入有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$【Python3正規表示式】函數
3.只能輸入至少n位的數字:^\d{n,}$4.只能輸入m~n位的數字:^\d{m,n}$
7.只能輸入有1~3位小數的正實數:^[0-9]+( .[0-9]{1,3})?$8.只能輸入非零的正整數:^+?[1-9][0-9]*$
re.match()從字串的起始位置配對一個模式,如果起始位置符合不成功的話,match()就回傳none。
re.search()掃描整個字串並傳回第一個成功的匹配。
re.sub()用於取代字串中的所有符合正規表示式的子字串,傳回替換後的字串
#re.findall()

搜尋字串,以列表形式傳回全部能匹配的子字串


re.split()Python 中正規表示式詳解

將字串依照正規表示式比對結果切割,傳回清單

#re.finditer()

搜尋字串,傳回一個符合結果的迭代類型,每個迭代元素是match物件

>>> match= re.findall(r'[1-9]\d{5}','100081BIT  BIT10008676')>>> print(match)
['100081', '100086']>>> match = re.split(r'[1-9]\d{5}','100081BIT  BIT10008676')>>> match
['', 'BIT  BIT', '76']>>> match = re.split(r'[1-9]\d{5}','100081BIT  BIT10008676',maxsplit=1)>>> match
['', 'BIT  BIT10008676']

>>>for m in re.finditer(r'[1-9]\d{5}','100081BIT  BIT10008676'):       if m:
            print(m.group(0))    
100081100086
登入後複製
登入後複製

re.match與re.search的區別re.match只符合字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函數傳回None;而re.search匹配整個字串,直到找到一個匹配。

###############相關推薦:#########關於js正規表示式詳解###########php正規則表達式詳解_PHP教學############非常重要的php正規表示式詳解,php正規表示式詳解######

以上是Python 中正規表示式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板