麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Python 正則表達式(轉義問題)

2020-02-23 06:14:31
字體:
來源:轉載
供稿:網友

先說一個比較囧的事情:在寫蝦米音樂試聽下載器的時候遇到一個問題,因為保存的文件都是用音樂的標題命名的,所以碰到一些諸如「対峙/out border」等含有非法字符(哼哼,說的就是你 →_→ Windows)的標題的時候,就會保存失敗。于是我想起了迅雷的解決方法:把所有的非法字符替換成下劃線。

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

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

最近意識到了這個函數里的好多問題:

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

于是感覺得正正經經看看文檔了。

Raw strings

看了文檔后才意識到,Python 正則表達式模塊的轉義是獨立的。例如匹配一個反斜杠字符需要將參數寫成:'////':

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

所以上面的 sanitize_filename 改成了:

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

Regex 和 Match

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

Python 的正則表達式模塊 re 中主要的對象其實是這倆:

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

代碼如下:
>>> email_pattern = re.compile(r'/w+@/w+/./w+')
>>> email_pattern.findall('My email is [email protected] and his is [email protected]')
['[email protected]', '[email protected]']

其中的方法:

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线高清中文字幕 | 高清av在线 | 妇子乱av一区二区三区 | 成人午夜免费av | 精品国产乱码久久久久久丨区2区 | 日本成年网 | 一级毛片在线观看免费 | 日本免费一区二区三区四区 | 久久久久久亚洲综合影院红桃 | 欧美不卡在线 | 久久精品视频2 | 国人精品视频在线观看 | 久久久精品视频网站 | 国产精品久久久久久久久久久久久久久 | 欧美视频国产精品 | 欧美性生活视频免费看 | 97中文字幕第一一一页 | 免费黄网站在线播放 | 午夜精品成人一区二区 | h视频在线免费观看 | 午夜伦情电午夜伦情电影 | 成人毛片视频免费 | 国产成人高潮免费观看精品 | 久久精品亚洲一区二区 | 一区二区三区四区高清视频 | 一级一级一级一级毛片 | 亚洲草逼视频 | 久久久久久久久日本理论电影 | 欧美雌雄另类xxxxx | 成年人福利视频 | 久久久久亚洲a | 亚洲天堂ww | 免费专区 - 91爱爱 | 一级免费特黄视频 | 亚洲福利在线观看视频 | 久久精品国产久精国产 | 在线观看福利网站 | 国产精品久久久久久久久久久久久久久久 | 国产亚洲自拍一区 | 免费a级毛片大学生免费观看 | 欧美精品免费一区二区三区 |