python正则表达式中的转义字符_python 正则表达式之转义字符
最近在整理python相關(guān)的知識(shí),使用python對(duì)網(wǎng)站進(jìn)行爬取數(shù)據(jù)的時(shí)候,需要使用到轉(zhuǎn)義字符,之前對(duì)轉(zhuǎn)義字符理解一直比較模糊,并且在python中還有一個(gè)叫原生字符r。所以通過(guò)網(wǎng)上調(diào)查資料對(duì)該內(nèi)容進(jìn)行整理,已備不時(shí)之需。
字符串轉(zhuǎn)義
反斜杠,在python中比較特殊,就是它可以用來(lái)構(gòu)成一些特殊字符,比如"\n"表示換行,"\t"表示制表符。
其中的'\n'已轉(zhuǎn)義為換行符,而'\W'沒(méi)有發(fā)生轉(zhuǎn)義,原因是"\W"在字符串轉(zhuǎn)義中并不對(duì)應(yīng)者特殊字符,沒(méi)有特殊含義。
正則轉(zhuǎn)義
上面僅僅是字符串轉(zhuǎn)義。在正則表達(dá)式中也存在轉(zhuǎn)義,先稱作"正則轉(zhuǎn)義"。在正則表達(dá)式中"\d"代表數(shù)字,"\s"代表空白符。提取"3/8"反斜杠之前的數(shù)字
import re
string = '3\8'
m = re.search('(\d+)\\\\', string)
if m is not None:
print (m.group(1) )
n = re.search(r'(\d+)\\', string)
if n is not None:
print (n.group(1) )
正則表達(dá)式字符串需要經(jīng)過(guò)兩次轉(zhuǎn)義,這兩次分別是上面的"字符串轉(zhuǎn)義"和正則表達(dá)式中的轉(zhuǎn)義
(1)'\\'的過(guò)程
先進(jìn)行“字符串轉(zhuǎn)義”,前兩個(gè)反斜杠和后兩個(gè)反斜杠分別被轉(zhuǎn)義成了一個(gè)反斜杠;即“\|\”被轉(zhuǎn)成了“|\”(“|”為方便看清,請(qǐng)自動(dòng)忽略)?!白址D(zhuǎn)義”后馬上進(jìn)行“正則轉(zhuǎn)義”,“\”被轉(zhuǎn)義為了“\”,表示該正則式需要匹配一個(gè)反斜杠。
(2)r'\'的過(guò)程
由于原始字符串中所有字符直接按照字面意思來(lái)使用,不轉(zhuǎn)義特殊字符,故不做“字符串轉(zhuǎn)義”,直接進(jìn)入第二步“正則轉(zhuǎn)義”,在正則轉(zhuǎn)義中“\”被轉(zhuǎn)義為了“\”,表示該正則式需要匹配一個(gè)反斜杠。
由于正則表達(dá)式使用反斜杠來(lái)轉(zhuǎn)義特殊字符,而python自身處理字符串時(shí),反斜杠也是用于轉(zhuǎn)義字符,這樣就產(chǎn)生一個(gè)雙重轉(zhuǎn)換的問(wèn)題,
總結(jié)
以上是生活随笔為你收集整理的python正则表达式中的转义字符_python 正则表达式之转义字符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 服务器应用日志清理,Linux下Tomc
- 下一篇: php处理上传文件的步骤,php文件上传