1. 程式人生 > >Python進階——re模組

Python進階——re模組

1.首先匯入re模組

import re

(1) re.match()函式對字串的

從字串的開頭進行匹配
用法: re.match(pattern,string)

import re
pat="\d+"
s="abc123abc123456"
print(re.match(pat,s))
輸出結果為:None

因為re.match()函式只匹配開頭,字串s的開頭不是數字,所以返回值為None

(2) re.search()函式

與re.match()函式不同,re.search()函式會用正則表示式取匹配字串的所有子串,如果找到,返回第一個匹配對應的Match物件,否則返回None:

search=re.search(pat,s)
print(search.group(0))
輸出結果為:123

(3) re.split()函式

re.split()函式使用指定的正則表示式最為分割符,對字串進行分割,其用法為:
re.split(pattern,string[, maxsplit])

t=re.split(" +","a b c  d  e")  # 用一個或多個空格來把這些字元分開
print(t)
輸出結果為:['a', 'b', 'c', 'd', 'e']

(4) re.sub()函式

re.sub()函式對字串中正則表示式所匹配的部分進行替換,其方法為:re.sub(pattern,repl,string[,count])

t=re.sub(" +",";","a b c  d   e")
print(t)
輸出的結果為:a;b;c;d;e

(5) re.findall()函式

re.findall()函式返回一個包含所有匹配Match物件的列表

3.方法.group()的使用

s='hello world'
p='hello (\w+)'
m=re.match(p,s)
print(m)
輸出結果為:<_sre.SRE_Match object; span=(0, 11), match='hello world'>
print(m.group(0))
輸出結果為:hello world
print(m.group(1)) #獲取第一個括號中的匹配結果
world

Match 物件的.group(0)方法返回匹配的整個字串,之後的1,2,3等返回的是正則表示式中每個括號匹配的部分。
可以用.groups() 檢視每個括號的匹配值

print(m.groups())
輸出結果為:('world',)

多個括號的情況

s='hello world san'
p='hello (\w+) (\w+)'
m=re.match(p,s)
print(m.groups())

輸出結果為:('world', 'san')
print(m .group(2))

輸出結果為:san

4.不需要轉義的字元

在正則表示式中,“\”來匹配一個反斜槓,在python 中,字串本身對反斜槓也是有轉義的,因此“\“會被先轉義為單個反斜槓:

print('\\')
輸出結果為:	\

因此在正則表示式中要使用反斜槓要使用四個反斜槓:

print('\\\\')
輸出結果為:\\

這樣看起來不是很方便,Python提供了不轉義字串來解決這個問題。不轉義字串的構造十分簡單,只需要在普通字串加上r,表示它是一個不轉義的字串。

t=re.split(r"\\",r"C:\foo\baz.txt")
print(t)
輸出結果為:['C:', 'foo', 'baz.txt']