使用Python re模块将字符串中匹配字典键的内容替换为对应值
代码修正方案
原代码错误原因
re.sub()的第二个参数仅支持传入字符串或可调用对象,你传入的dictionary[k] for k in dict_comb是生成器表达式,不符合参数要求,且逻辑错误:不需要遍历所有字典键,仅需要对实际匹配到的内容做字典查询即可。- 直接拼接字典键没有做长度排序和边界限制,可能出现短键优先匹配、部分内容误匹配的异常情况。
修正后代码
import re dictionary = {"Januar":"January","Februar":"February","März":"March","April":"April","Mai":"May","Juni":"June", "Juli":"July","August":"August","September":"September","Oktober":"October","November":"November", "Dezember":"December"} # 按键长度倒序拼接,避免短键被优先匹配,同时添加单词边界避免部分内容误匹配 dict_comb = r"\b(?:{})\b".format("|".join(sorted(dictionary.keys(), key=lambda x: len(x), reverse=True))) date = '09 Mai.2022' # 用lambda表达式接收匹配结果,查询字典返回对应值 dates_fo = re.sub(dict_comb, lambda match: dictionary[match.group()], date) print(dates_fo)
运行后输出为09 May.2022,符合预期需求。
内容的提问来源于stack exchange,提问作者Aniiya0978
相关产品推荐
相关产品推荐

