Python的正則表達式模塊:re

ew3y 9年前發布 | 21K 次閱讀 正則表達式 Python開發

re是Python中最常見的正則表達式模塊,常用方法包括compile,match,findall,finditer,search,split,sub等.

在一些字符串自身操作方法不方便使用的情況下,使用re模塊能夠非常方便地完成一些查找和替換等操作.

1, compile

預先編譯好正則表達式,可為之后的重復使用節省時間.

    >>> import re  
    >>> url = "http://10.128.39.48:8058/net_command"  
    # 編譯一個正則表達式對象reg,   
    # reg有多個方法可以調用,如re.match(), re.findall(), re.sub()等  
    >>> reg = re.compile('^http:\/\/(.*?):(\d+?)\/net_command')  
    # 針對url,執行正則匹配,然后通過group()來取得匹配結果  
    >>> result = reg.match(url)  
    >>> result.group()  
    'http://10.128.39.48:8058/net_command'  
    >>> result.group(0)  
    'http://10.128.39.48:8058/net_command'  
    >>> result.group(1)  
    '10.128.39.48'  
    >>> result.group(2)  
    '8058'  

2, re.match(‘p’, ‘python’) 會在字符串的開頭匹配正則表達式: 如果開頭即不符合,則匹配失敗.

而re.search('net_command', url)會掃描整個字符串,直到找到第一個匹配結果返回.
二者的匹配結果也可通過group()方法來獲取.
3, re.findall('net_command', url) 會查找所有匹配結果,并返回結果列表.
而re.finditer()找到匹配結果,將它們作為一個迭代器返回.
4, re.sub('net_command', 'command_net', url) 用于匹配結果的替換操作, 等同于 url.replace('net_command', 'command_net').
sub()方法的第四個參數表示替換次數,默認0為全部替換.
5, re.split('/', url), 等同于 url.split('/'), split()方法的第三個參數表示分割次數,默認0為全部.
6, start(), end(), 分別表示匹配結果的開始和結束索引. 而span()則返回開始和結束索引組成的元組.
7, 正則表達式參數, re.VERBOSE(或re.X)可使正則表達式結構化,形式更易讀.
re.DOTALL(或re.S)使得 . 匹配包括換行符在內的任意字符.
re.IGNORECASE(或re.I)使得匹配對大小寫不敏感.
re.MULTILINE(或re.M)使得多行匹配生效,影響^和$的首尾匹配.
8, 相比于re模塊,我們應該盡可能地使用字符串自身的一些操作方法,
如replace和translate用于子字符串替換(替代re.sub()), index和find用于查找操作(替代re.search()和re.match()).
9, python正則表達式中的前綴和后綴,如下

re.findall(r"(?<=\()\d+?(?=\))", text)

則(?<=\()表示以(為前綴, (?=\))表示以)未后綴, 可用于匹配括號中的數字.

因為有些情況下使用re.findall(r"\((\d+)\)", text)來獲取括號中數字會出錯,尤其是受一些奇特的字符影響的時候.

 本文由用戶 ew3y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!