正規表示式
1. 匹配乙個字元
說明
表示式
等價表示式
數字\d
[0-9]
字母、數字、下劃線
\w[a-za-z0-9_]
除換行外任意字元.空格
\s[\t\n\r\f\v]
除數字\d
除字母、數字、下劃線
\w除空格
\s2. 集合
表示式
說明
[abc][a-g]
指乙個集合,匹配中的任意乙個
[^a]
^在集合開頭,匹配除a以外字元
a|b匹配a或b表示式
(a)()指乙個組,匹配a中所有內容
3. 重複
表示式
說明
a?貪心地匹配a 0次或1次(貪心表示盡可能多地)
a信心地匹配a m-n次。:0-n次 :m-無限次
a*貪心地匹配a 0-無限次
a+貪心地匹配a 1-無限次
a?? a*? a+? a?
盡可能少地匹配
4. 匹配位置
表示式
說明
^...
要求匹配給定串的開頭
...$
要求匹配給定串的結尾
...\b
匹配單詞邊界,匹配成功要求a匹配到給定串的邊界
使用時模式串要用r,因為\b還有其它意義
...\b
匹配單詞非邊界
\a...
要求匹配給定串的開頭
...\z
要求匹配給定串的結尾
5. 設定標誌
表示式
說明
(?ailmsux)
(?)是固定格式,後面的字母代表不同意思。
a(ascii),i(ignorecase),l(locale),
m(multiline,^和$會匹配每一行的開頭和結尾),
s(dotall,不用的時候.不能匹配換行符),u(),
x(verbose,可以在pattern裡面換行寫注釋,
如a = re.compile(r"""\d + # the integral part \.
# the decimal point \d *
# some fractional digits""", re.x),
#用來表示注釋的開始)
(?imsx-imsx:...)
設定或移除標誌,中間是-,標誌的集合為imsx
(?p...)
和一般()表示式一樣,額外功能:可以用name來訪問到對應的組
例:matchobj = re.match("?p.*)", "first")
data = matchobj.group("first")
(?p=name)
可以反向引用乙個名字為name的組
(?#...)
#說明括號中的內容是注釋,直接省略
a(?=b)
若a在b前,才可匹配出a,同時b不消耗字元
a(?!b)
若a不在b前,才可匹配出a,同時b不消耗字元
(?<=a)b
若a在b前,才可匹配出b,同時a消耗字元
(?若a不在b前,才可匹配出b,同時a消耗字元
\number
引用第number組的模式串
pattern = '(a)(b) \2' 和 pattern = '(a)(b)(b)'是等價的
例:re.search(r'(a)(b)\2', 'abb')
函式
1. re:正規表示式模組
函式宣告
功能備註
compile(pattern, flag=0)
把乙個正規表示式編譯成乙個正規表示式物件
pattern: 模式串flag:編譯方法
search(pattern, string, flags=0)
如果匹配不成功,則返回none成功,則matchobject型別值
split(pattern, string, maxsplit-0, flags=0)
按照pattern模式對string進行分割(1. 把匹配成功的部分除去且成為分界
2. 如果pattern中有(),那麼匹配成功的部分不除去且自己成為乙個組)
maxsplit:最多分割次數
如果pattern在串的最後能匹配成功,則還會分割出乙個空串
findall(pattern, string, flags=0)
把string按照pattern從左到右匹配,子串結果以元組形式返回(不重疊)
finditer(pattern, string, flags=0)
把string按照pattern從左到右匹配,返回迭代器(不重疊)
sub(pattern, repl, string, count=0, flags=0)
string中和pattern匹配成功的部分刪除(只有最左的),
用repl來替換,返回匹配後的串
count:要刪除匹配成功的個數,如果取0則所有都要換
escape(pattern)
把pattern中除了ascii字母和數字保留,其它都加上轉義符\,
並返回修改後的串(當串中可能包含正規表示式特殊符號時可用來轉換)
2.re.
regexobject類
:
正規表示式物件,對應的函式功能與re模組類似,返回re.matchobject物件
函式宣告
功能備註
search(string[,pos[,endpos]])
pos和endpos可不寫
match(string[,pos[,endpos]])
split(string, maxsplit=0)
findall(string[,pos[,endpos]])
finditer(string,[,pos[,endpos]])
sub(repl, string, count=0)
groups
模式中子組的個數
groupindex
返回組名字與(?p)定義組順序的對映字典
pattern
模式串
3. re.matchobject類:匹配結果類
函式宣告
功能備註
group(index1, index2,...)
返回匹配結果組
index指出要返回結果組的下標,預設為0,
把所有結果寫成串。若有多個,以元組形式返回
groups()
返回所有子組的元組
groupdict()
把所有命名的子組以字典形式返回
start([group])
end([group])
返回子組(用名字或下標標識)
在串中匹配成功開始/結果的位置
startpos endpos
傳遞給search和match函式時
指定的開始/結束匹配串的位置
lastindex lastgroup
最後匹配成功的組的下標/名字
如果沒有的話,返回none
re匹配時用的正規表示式物件
string
傳遞給match/search函式的串
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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...