欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python 正則表達(dá)式(轉(zhuǎn)義問題)

系統(tǒng) 1821 0

先說一個(gè)比較?宓氖慮椋涸諦聰好滓衾質(zhì)蘊(yùn)?下載器的時(shí)候遇到一個(gè)問題,因?yàn)楸4娴奈募际怯靡魳返臉?biāo)題命名的,所以碰到一些諸如「??峙/out border」等含有非法字符(哼哼,說的就是你 →_→ Windows)的標(biāo)題的時(shí)候,就會(huì)保存失敗。于是我想起了迅雷的解決方法:把所有的非法字符替換成下劃線。

于是就引入了正則表達(dá)式的使用。一番搜索囫圇吞棗后,我寫下了這樣的函數(shù):

復(fù)制代碼 代碼如下:

def sanitize_filename(filename):
return re.sub('[\/:*?<>|]', '_', filename)

最近意識(shí)到了這個(gè)函數(shù)里的好多問題:

  • Python 和 Shell 不同,無論單引號(hào)還是雙引號(hào),反斜杠都是轉(zhuǎn)義符。走狗屎運(yùn)的是,Python 對(duì)于沒意義的轉(zhuǎn)義 \/ 的處理是保持原樣。
  • 即便如此, sanitize_filename('\\/:*?<>|') 依舊返回 \_______ 而不是全部都是下劃線。

于是感覺得正正經(jīng)經(jīng)看看文檔了。

Raw strings

看了文檔后才意識(shí)到,Python 正則表達(dá)式模塊的轉(zhuǎn)義是獨(dú)立的。例如匹配一個(gè)反斜杠字符需要將參數(shù)寫成:'\\\\':

Python 將字符串轉(zhuǎn)義:\\\\ 被轉(zhuǎn)義為 \\
re 模塊獲得傳入的 \\ 將其解釋為正則表達(dá)式,按照正則表達(dá)式的轉(zhuǎn)義規(guī)則將其轉(zhuǎn)義為 \
如此麻煩的前提下,Raw String 就大有作為了,顧名思義就是(除了結(jié)尾的反斜杠)不會(huì)被轉(zhuǎn)義的字符串。于是匹配一個(gè)反斜杠字符就可以寫作 r'\\'。

所以上面的 sanitize_filename 改成了:

復(fù)制代碼 代碼如下:

def sanitize_filename(filename):
return re.sub(r'[\\/:*?<>|]', '_', filename)

Regex 和 Match

于是正經(jīng)看看 re 模塊吧~以下為流水帳,供急性子觀看。

Python 的正則表達(dá)式模塊 re 中主要的對(duì)象其實(shí)是這倆:

正則表達(dá)式 RegexObject
匹配 MatchObject
RegexObject 是正則表達(dá)式對(duì)象,所有 match sub 之類的操作都?xì)w它所有。由 re.compile(pattern, flag) 生成。

復(fù)制代碼 代碼如下:

>>> email_pattern = re.compile(r'\w+@\w+\.\w+')
>>> email_pattern.findall('My email is abc@def.com and his is user@example.com')
['abc@def.com', 'user@example.com']

其中的方法:

search 從任意字符開始匹配,返回 MatchObject 或者 None
match 從第一個(gè)字符開始匹配,返回 MatchObject 或者 None
split 返回由匹配分割的 List
findall 返回所有匹配的 List
finditr 返回 MatchObject 的迭代器
sub 返回替換后的字符串
subn 返回 (替換后的字符串, 替換次數(shù))
re 模塊里提供的函數(shù)如 re.sub re.match re.findall 實(shí)際上都可以認(rèn)為是一種省去直接創(chuàng)建正則表達(dá)式對(duì)象的捷徑。而由于 RegexObject 對(duì)象本身可以反復(fù)使用,這也是它相對(duì)于這些捷徑函數(shù)的優(yōu)勢所在。

MatchObject 則是匹配對(duì)象,表示一次正則表達(dá)式匹配的結(jié)果。由 RegexObject 的一些方法返回。匹配對(duì)象永遠(yuǎn)是 True 的,另外還有一大堆用來取得正則表達(dá)式中分組(group)相關(guān)信息的方法。

復(fù)制代碼 代碼如下:

>>> for m in re.finditer(r'(\w+)@\w+\.\w+', 'My email is abc@def.com and his is user@example.com'):
... print '%d-%d %s %s' % (m.start(0), m.end(0), m.group(1), m.group(0))
...
12-23 abc abc@def.com
35-51 user user@example.com

參考
  • The Python Standard Library: http://docs.python.org/2/library/re.html

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久久久久国 | 黄色短视频在线免费观看 | 91婷婷色 | 中文字幕人成乱码在线观看 | 久久久久亚洲 | 精品久久久久久一区二区 | 爽毛片| 久久精品人人做人人看最新章 | 亚洲AV久久综合无码东京 | 一级欧美在线的视频 | 伦一区二区三区中文字幕v亚洲 | 妇女毛片| 最新亚洲视频 | 天天干天天插天天操 | 国产专区一区 | 成人免费一区二区三区视频软件 | 日本女人毛茸茸 | 国产精品91久久久久久 | 美国三级日本三级久久99 | 一级欧美黄色片 | 三级理伦 | 精品久久久久久久中文字幕 | 精品欧美日韩 | 国产精品果冻麻豆精东天美 | 四月婷婷七月婷婷综合 | 色综合天天色综合 | 成人在线小视频 | 国产一级免费不卡 | 精品国产91亚洲一区二区三区www | 国产精品永久免费视频观看 | 婷婷久久综合 | 成在线人免费视频一区二区三区 | 欧美99| 激情丁香婷婷 | 久久99国产亚洲精品观看 | 99热人人 | 久操成人 | 国产成人精品一区二区在线 | 中文字幕人成乱码在线观看 | 欧美午夜一区 | 91丁香亚洲综合社区 |