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

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

系統 2034 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條評論
主站蜘蛛池模板: 亚洲一级在线观看 | 成人 在线 | 国产第一页在线视频 | 玖操网 | 天天影视免费在线观看入口 | 91伊人| aaa在线观看 | 日韩三级中文字幕 | 苏晓晖个人简介军衔 | 欧美日韩精品一区三区 | 激情啪啪网站 | 懂色中文一区二区三区在线视频 | 青草青草久热精品视频在线网站 | 日韩高清一区 | 丁香六月综合网 | 色网站综合 | 欧美高清成人 | 日本高清免费在线视频 | 免费无码一区二区三区A片18 | www.狠狠色 | 国产日韩精品一区 | 国产夜色 | 久久精品视频网站 | 97久久精品午夜一区二区 | 夜本色 | 久久精品国产久精国产 | 好吊色欧美一区二区三区四区 | 草比网站 | 久久久一区二区三区不卡 | 99在线精品视频在线观看 | 国产在线观看91一区二区三区 | 国产a精品三级 | 欧美成年网站 | 久久一区二区明星换脸 | 成人午夜精品视频在线观看 | 四虎精品8848ys一区二区 | 国产精品亚洲视频 | 香蕉国产在线观看免费 | 久久精彩视频 | 嫩草影院在线入口 | 色网在线免费观看 |