请教:Python字符串替换的一个问题
天蓬老师
天蓬老师 2017-04-17 13:57:06
[Python讨论组]

今天上网看到有人贴出来一个Python中字符串替换的函数replace_words。大意是随便一个txt文件,用Python读取之后,可以用自定义的dictionary,把所有的key替换成value.

def replace_words(text, word_dic): 
     yo = re.compile('|'.join(map(re.escape, word_dic))) 
     def translate(mat): 
         return word_dic[mat.group(0)] 
     return yo.sub(translate, text) 

我试了一下,还挺好用的。

my_dic = {'Colour':'Color', 'Centre':'Center'} 
text_2 = replace_words(text_1, my_dic)

结果文件text_1里所有的ColourCentre都被替换了。

但是这个毕竟是网上看来的,有几个地方不太明白,请教一下:

问题一,第2行的'|'.join(map(re.escape, word_dic)),先用escape对字符串中的非字母数字进行转义,然后为什么要用'|'把我的dic这么一个字典连起来?字符可以取“或”,字典可以“或”么?

问题二,第4行的word_dic[mat.group(0)],直接写成word_dic[mat]不好么?

问题三,第5行的yo.sub(translate, text),这个是最费解的…… re.sub很好理解,但是这个是re.compile.sub,而且是用text这样一个read()出来的文本、去替换translate这样一个空函数?字符替换函数?

网上随手找的这么一个函数,因为我水平有限还请大家多指点。谢谢!

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
巴扎黑

问题一,第2行的'|'.join(map(re.escape, word_dic)),先用escape对字符串中的非字母数字进行转义,然后为什么要用'|'把我的dic这么一个字典连起来?字符可以取“或”,字典可以“或”么?

map(re.escape, word_dic) 等价于 map(re.escape, word.dic.keys())
#  返回 一个有所以字典key 的 list

'|'.join(_that_list__)  #把所有的key 用 | 连起来
# 返回 Colour|Centre

'|' 在正则表达式里就是 ’或‘的意思

问题二,第4行的word_dic[mat.group(0)],直接写成word_dic[mat]不好么?

不可以。

mat 是个正则表达式search text 之后返回 Match 对象, 这个对象不是字典里的key , word_dic的key是string

问题三,第5行的yo.sub(translate, text),这个是最费解的…… re.sub很好理解,但是这个是re.compile.sub,而且是用text这样一个read()出来的文本、去替换translate这样一个空函数?字符替换函数?

re.compile.sub --> 会搜索text中 'Colour|Centre'(Colour 或 Center) 一旦找到了match 就调用translate函数进行转化 Colour 就会被转化成 word_dic['Colour']也就是 'Color'  
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号