Python基礎入門:正則re.sub使用自定義替換方法

在使用正則替換時,有時候需要將匹配的結果做對應處理,便可以使用自定義替換方法。
re.sub的用法為:

創新互聯2013年開創至今,是專業互聯網技術服務公司,擁有項目做網站、網站制作網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元龍山做網站,已為上家服務,為龍山各地企業和個人服務,聯系電話:13518219792

re.sub('匹配表達式',替換字符或替換函數,替換次數,其他參數)

例如,加入將字符串中的$開頭的變量替換為上下文context中對應的值,可以操作如下。

import re
context = {'a': 1, 'b': 2, 'except': 3}
text = '$a + $b = $except'

def repl_func(matched):
    if matched:
        text = matched.group(1)
        return str(context.get(text))

result = re.sub('\$(\w+)', repl_func, text)
print(result)

打印結果為:

1 + 2 = 3

下面是一個用于替換字符串,字典,列表,元祖類型中特定變量的方法。

'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流群:
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
import re
import json


def parser(origin, *args, delimiter="$", **kwargs):  # 支持修改delimiter定界符

    patten = r'\{}(?P<var>.+?)'.format(delimiter)

    def repl_func(matched):   # 自定義re.sub使用的替換方法
        var = matched.group('var')
        if var.isdigit():   # 如果是數字, 則從args中替換
            index = int(var) - 1
            if index < len(args):
                return args[index]
            else:
                return "{}{}".format(delimiter, var)   # 無替換參數則返回原值
        else:
            return kwargs.get(var, None) or "{}{}".format(delimiter, var)   # 返回kwargs參數中值 or 原值

    if isinstance(origin, str):
        return re.sub(patten, repl_func, origin, re.M)
    elif isinstance(origin, (dict, list)):  # 使用json.dumps轉為字符串, 替換,然后重新轉為dict/list
        return json.loads(re.sub(patten, repl_func, json.dumps(origin), re.M))
    else:
        if isinstance(origin, tuple):
            return tuple(json.loads(re.sub(patten, repl_func, json.dumps(origin), re.M)))  # 轉換后重新轉為tuple


if __name__ == '__main__':
    s = ['性別: $2  年齡: $3\n$a', '$1', {"say": "$a"}]
    print(parser(s, 'kevin', 'male', '20', a="hello, world!"))

網頁標題:Python基礎入門:正則re.sub使用自定義替換方法
文章出自:http://m.kartarina.com/article30/dsojoso.html

成都網站建設公司_創新互聯,為您提供關鍵詞優化網站策劃移動網站建設網站內鏈標簽優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設
主站蜘蛛池模板: 亚洲韩国精品无码一区二区三区| 中文字幕无码无码专区| 亚洲精品无码专区在线| 岛国无码av不卡一区二区| 无码精品黑人一区二区三区| 亚洲aⅴ无码专区在线观看春色| 精品无人区无码乱码毛片国产| 伊人久久无码中文字幕| 人妻无码久久精品人妻| 日韩精品无码一区二区中文字幕| 国产精品无码一本二本三本色| 无码国产精品一区二区免费模式 | 夜夜精品无码一区二区三区| 国产成A人亚洲精V品无码| 日韩夜夜高潮夜夜爽无码| 无码日韩人妻精品久久蜜桃| 亚洲午夜无码AV毛片久久| 亚洲av日韩aⅴ无码色老头| 久久久无码精品亚洲日韩蜜桃| 亚洲成A人片在线观看无码3D| 精品久久久久久无码中文字幕一区| 亚洲va中文字幕无码久久 | 国产亚洲精品a在线无码| 亚洲精品GV天堂无码男同| 精品无码一区二区三区爱欲九九 | 精品人妻无码区在线视频| 中文字幕无码精品三级在线电影| 无码一区二区三区在线| 亚洲GV天堂GV无码男同| 一区二区三区无码被窝影院| 亚洲综合无码一区二区三区| 久久成人无码国产免费播放| 亚洲精品无码午夜福利中文字幕| 内射中出无码护士在线| 亚洲a无码综合a国产av中文| 无码人妻av一区二区三区蜜臀| 亚洲日韩国产二区无码| 精品少妇人妻AV无码专区不卡| 亚洲国产精品无码久久98| 久久久久无码精品国产h动漫| 亚洲精品无码av中文字幕|