tkinter编辑器使用re替换Java关键字为HTML标签仅单次生效问题
问题原因
你的代码存在两个核心问题导致只有最后一个关键字被替换:
- 每次替换逻辑都基于最原始的
text变量执行,每次新生成的text_after都会覆盖上一轮的替换结果,最终仅保留最后一个匹配关键字的替换效果。 - 按空格拆分单词的匹配方式容错性极低,遇到制表符、多连续空格、关键字紧挨标点/括号的场景都会匹配失败,且未做单词边界限制,容易误替换包含关键字片段的普通变量名。
修复后的代码
直接替换原print_html函数即可:
def print_html(): """Print html""" text = txt_edit.get(1.0, tk.END) for keyword in keywords: # 用单词边界\b限制精准匹配关键字,re.escape避免特殊字符异常 text = re.sub(rf'\b{re.escape(keyword)}\b', f'<span class="keyword">{keyword}</span>', text) print(text)
优化说明
- 直接遍历关键字列表执行替换,不需要逐行逐词拆分文本,代码更简洁高效
- 每次替换都直接更新
text变量,所有替换效果会叠加保留,不会出现之前的覆盖问题 - 新增的正则单词边界和转义逻辑,可避免误匹配包含关键字的普通字符串,适配更多代码书写场景
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

