亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

第11.23節 Python 中re模塊的搜索替換功能:sub及subn函數

系統 2149 0

一、 引言
在《第11.3節 Python正則表達式搜索支持函數search、match、fullmatch、findall、finditer》重點介紹了幾個搜索函數,除了搜索,re模塊也提供搜索并替換功能,這個就是re模塊的sub函數。

二、 語法釋義

  1. 調用語法:
    re.sub(pattern, repl, string, count=0, flags=0)
    re.subn(pattern, repl, string, count=0, flags=0)

  2. 參數:
    1)pattern:匹配的正則表達式;
    2)string:搜索文本字符串
    3)repl:替換對象,將搜索文本中和模式匹配的字符串替換為repl對象對應的內容,repl可以是,或者是字符串一個函數
    4)count:用于限制最多替換多少次,為0或者沒有傳入則全部替換;
    5)flags:搜索標記,與《第11.2節 Python 正則表達式支持函數概覽》介紹的參數flags標記含義相同。

  3. 返回值:
    sub返回通過使用 repl 替換在通過正則表達式模式搜索到的字符串。 如果沒有找到匹配子串,則直接返回 string。
    subn與sub函數一樣執行搜索替換,但是不是返回替換后的字符串,而是返回一個元組,元組的第一個元素是替換后的字符串(該元素與sub返回值相同),第二個元素是執行替換的次數。

三、 關于repl參數的說明

  1. 可以是字符串,如為字符串,則其中任何反斜杠轉義序列都會被按轉義結果處理, 也就是說,\n 會被轉換為一個換行符,\r 會被轉換為一個回車附,…。 未知的 ASCII 字符轉義序列會被當作錯誤來處理,其他未知轉義序列例如 \& 會保持原樣;
  2. repl如果是字符串,可以使用組名如\g或組序號如 \1、\g<序號>的后向引用,實際處理時會使用組匹配結果的對應組所匹配到的子字符串來執行目標串的替換;
  3. 如果repl是函數類型:
    1)函數只能帶一個參數,參數類型必須是匹配對象;
    2)該匹配對象是Python每匹配到一個搜索串時調用,由于搜索內容是由整個正則表達式確認的,因此一般情況下搜索串應該是以代表整個搜索內容的組0對應結果作為處理數據進行處理,除非有特殊處理要求再考慮使用其他組;
    3)Python在每匹配到一個該函數對匹配對象處理的結果進行處理后的返回內容作為替換字符串。

四、 案例

  1. 分別調用sub和subn使用字符串作為替換內容,字符串包含組名和組序號
            
              >>> re.sub(r'(?i)(?P
              
                py\w*)',r'\1:\g<1>:\g
                
                  ->Python','Python?PYTHON!Learning python with LaoYuan! ')
'Python:Python:Python->Python?PYTHON:PYTHON:PYTHON->Python!Learning python:python:python->Python with LaoYuan! '

>>>re.subn(r'(?i)(?P
                  
                    py\w*)',r'\1:\g<1>:\g
                    
                      ->Python','Python?PYTHON!Learning python with LaoYuan! ')
('Python:Python:Python->Python?PYTHON:PYTHON:PYTHON->Python!Learning python:python:python->Python with LaoYuan! ', 3)
>>>

                    
                  
                
              
            
          

上述案例中, \1:\g<1>:\g 都是訪問的匹配的字符串,除了不論大小寫的“python”,其他諸如“py”、“pyth”等py開頭的字符串都會被替換為“Python”。

  1. 使用函數作為替換內容
    本案例將小說的中文章節中的數字替換為阿拉伯數字,定義了函數transnumber將中文數字翻譯成阿拉伯數字,在正則表達式中找章節并調用函數transnumber執行替換。
            
              >>> def transnumber(m):
    numbdict={'零':'0','一':'1','二':'2','三':'3','四':'4','五':'5','六':'6','七':'7','八':'8','九':'9','十':'','百':''}
    result=[]
    for i in m.group(0):result.append(numbdict[i])
    resultstr = ''.join(result)
    print("group(0):",m.group(0),"groups:",m.groups(),"result:",resultstr)
    return resultstr

>>> re.sub(r'(?<=第)([一-十零百]+)(?=[章,回])',transnumber,'第一回第二回第九十七回第一百零八回第七百二十二回')
group(0): 一 groups: ('一',) result: 1
group(0): 二 groups: ('二',) result: 2
group(0): 九十七 groups: ('九十七',) result: 97
group(0): 一百零八 groups: ('一百零八',) result: 108
group(0): 七百二十二 groups: ('七百二十二',) result: 722
'第1回第2回第97回第108回第722回'

>>> re.subn(r'(?<=第)([一-十零百]+)(?=[章,回])',transnumber,'第一回第二回第九十七回第一百零八回第七百二十二回')
group(0): 一 groups: ('一',) result: 1
group(0): 二 groups: ('二',) result: 2
group(0): 九十七 groups: ('九十七',) result: 97
group(0): 一百零八 groups: ('一百零八',) result: 108
group(0): 七百二十二 groups: ('七百二十二',) result: 722
('第1回第2回第97回第108回第722回', 5)
>>>

            
          

老猿Python,跟老猿學Python!
博客地址:https://blog.csdn.net/LaoYuanPython
請大家多多支持,點贊、評論和加關注!謝謝!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狠狠色噜噜狠狠狠狠狠色综合久久 | 欧美一区日韩一区中文字幕页 | 日日好| 日韩欧美综合在线二区三区 | 午夜精品久久久久久久第一页 | 老司机日日摸夜夜摸精品影院 | 男人午夜免费视频 | 亚洲福利影院 | 高清国产美女一级a毛片录 高清国产美女一级毛片 | 在线观看 一区 | 国产成人精品18 | 日日操免费视频 | 欧美综合国产精品日韩一 | 热综合一本伊人久久精品 | 久草精品视频在线观看 | 日本不卡免费高清视频 | 免费一级毛片在线播放放视频 | 免费国产视频在线观看 | 日韩在线一区二区三区视频 | 亚洲高清不卡视频 | 深夜在线观看网站 | 97精品国产高清在线看入口 | 久草在线这里只有精品 | 欧美一级毛片aaa片 欧美一级毛片不卡免费观看 | 国产精品无| 一区二区三区精品国产 | 免费精品久久久久久中文字幕 | www欧美视频 | 伊人久久波多野结衣中文字幕 | 四虎在线观看免费视频 | 久久久久中文字幕 | 精品国产人成亚洲区 | 一级毛片不卡 | 欧美成人a级在线视频 | 成 人 免费 黄 色 视频 | 国产欧美一区二区三区免费 | 99国产精品视频免费观看 | 欧美精品国产一区二区三区 | 亚洲精品视频一区二区 | 性色va| 久久人人精品 |