Python 正規表示式學習(二)正規表示式語法

2021-07-26 11:41:39 字數 3269 閱讀 3568

一,單一字元匹配:

(1)匹配任意字元: .    

import re

res = re.match(r'a..','abcd')

print(res.group())

#列印結果:abc

一點.表示匹配任意的字元。上面的**表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.. 則會發生錯誤。

(2)匹配指定字元:[  ]

如   [ 0-9a-za-z ]   表示 匹配乙個 0~9或所有英文本母

import re

res = re.match(r'[0-9a-za-z]',r'abc')

print(res.group())

#列印結果:a

(3)\d 和 \d:匹配數字和匹配非數字

import re

res = re.match(r'\d',r'123abc')

print(res.group())

#列印結果:1

(4)\s 和 \s :匹配空白字元和非空白字元(就是空格)

(5)\w 和 \w:匹配 0~9,a~z,a~z的字元 和 非 0~9,a~z,a~z的字元 

跟[ 0-9a-za-z ]作用相同

(6)\b 和 \b

\b的作用是匹配乙個單詞邊界,即是單詞和空間之間的位置

例如: er\b 可以匹配 never 中的 er ,但不能匹配 verb 中的 er

二,一次匹配多個字元

(1) *  匹配前乙個字元0~無限次

import re

res = re.match('1*', r'112233abcd')

print(res.group())

#列印結果:11

上面的**由於 *的前面是1,所以可以匹配無限個1(其實只有2兆多個)

import re

res = re.match(r'\w*', r'112233abcd')

print(res.group())

#列印結果:112233abcd

上面的**則列印全部的字串

(2)+ 匹配前乙個字元 1~無限次

+ 與 * 的區別就是 + 不允許沒有匹配到字元,而 * 可以不匹配到字元

import re

res = re.match(r'1+', r'112233abcd')

print(res.group())

#列印結果:11

若:

import re

res = re.match(r'0+', r'112233abcd')

print(res.group())

#列印結果:程式報錯,因為字串裡沒有0

(3)?匹配前乙個字元 0次或者1次

import re

res = re.match(r'1?', r'1112233abcd')

print(res.group())

#列印結果:1

(4) 和  匹配前乙個字元m次 和 匹配前乙個字元至少n次至多m次

import re

res = re.match(r'1', r'111112233abcd')

print(res.group())

#列印結果:111

三,字串邊界匹配

(1)^ 和 $ 在字串中

^用在字串中表示匹配時,^後的第乙個字元必須在字串的第乙個位置,而$則規定$前面的內容必須在字串的最後才能匹配成功,如:

import re

#匹配電子郵箱

res = re.match(r'\[email protected]$',r'[email protected]')

print(res.group())

#列印結果:程式出現錯誤,因為$表示所在位置必須是字串的結尾

res = re.match(r'\[email protected]$',r'[email protected]')

print(res.group())

#列印結果:[email protected]

(2)\a 和 \z

作用和 ^ 和 $ 一樣。

四,分組匹配

(1) |

a|b 的作用是匹配 a 或 b,如:

import re

#匹配電子郵箱

res = re.match(r'\w+@(163|126|qq)\.com',r'[email protected]')

print(res.group())

#列印結果:[email protected]

#這樣寫不僅可以匹配126的郵箱,還能匹配163和qq郵箱。

(2)分組(ab):作用是()中的ab被視為乙個分組

import re

#匹配電子郵箱

reg = r'<(dir>)\w+test_zje'

res = re.match(reg,str)

print(res.group())

#列印結果:test_zje

#上面的** 括號()括起了 dir> 表示 dir> 為第乙個分組,所以後面的\1 就表示第乙個分組 dir>

當然也可以給分組起乙個名字,用名字來引用分組,如:

import re

#匹配電子郵箱

reg = r'<(?p[\w]+>).+test_zje'

res = re.match(reg,str)

print(res.group())

#列印結果:test_zje

#上面的** 把第乙個分組命名為 mark,然後(?p=mark)表示引用乙個命名為mark的分組

(3)向前向後查詢

只有在組內才能向前向後查詢

如在字串 src="" 中的 

正則可以這樣寫: reg = r' ((?<=src=")") ) '

前面的(?<=src=)表示若字串中有 「src=」 這個字串則匹配,但不返回 「src=「 這個字串,用在正規表示式之前

後面的(?=")表示若字串中有 雙引號「 則匹配,但不返回 雙引號」 ,用在正規表示式之後。

python正規表示式(二)

re模組的用法 1 re.s可以匹配轉義符 re.findall k.n darken dark nn 只輸出第乙個darken中的ken re.findall k.n darken dark nn re.s 不僅輸出darken中的ken,還輸出了dak nn中的k nn 2 re.m匹配多行 r...

Python 正規表示式(二)

這次的正規表示式學習談一談選擇符和子模式 可選項和重複子模式 在字串的各個字元都不相同的請胯下,字符集是比較好用的,但是如果只想匹配特定的字串,那麼字符集就不合適了,這裡就可以使用管道符號 比如我們只想匹配字串 python 和 perl 我們可以使用正則 python perl 但是有時候我們不需...

python正規表示式(二)

python的正規表示式支援大量的擴充套件符號 通過使用 ilmsux 系列,使用者可以在正規表示式裡面指定乙個或者多個標記,而不是通過compile 或者其他re模組函式。下面使用re.i ignorecase的示例,最後乙個示例在re.m multiline實現多行混合。import re re...