0

我正在尝试编写一个 BBS 程序,我希望能够输入 ^Qc6} 之类的内容并让它切换文本颜色。我已经弄清楚了大部分,通过使用正则表达式搜索并找到我想要匹配的文本,当我逐行读取文件时,它会找到我想要匹配的所有实例。

但是当我使用 .replace() 方法时,只有我正在处理的行中的第一个实例被替换。其他一切都没有,直到下一行。所以我不确定如何纠正这个问题。

#!/usr/bin/env python

import sys
import re

ansi_colors = {"c0" : "\033[0.30m" , "c1" : "\033[31m" , "c2" : "\033[0.32m" , "c3" : "\033[0.33m" , "c4" : "\033[0.34m" , "c5" : "\033[0.35m" , "c6" : "\033[0.36m" , "c7" : "\033[0.37m"}

display = open('sys.start','r')
for lines in display:
    match = re.search(r'(\^Q)(\w+)(\})' , lines)
    if match:
      lines = lines.replace(match.group() , ansi_colors[match.group(2)]).strip("\n")
      #print(match.group() + " should be " + ansi_colors[match.group(2)] + "this color.\033[0m")
      print(lines)
    else: print(lines).strip("\n")
4

1 回答 1

0

你为什么同时使用搜索替换?如果未找到正则表达式 - replace将返回未更改的字符串。至于您的问题 - 使用替换方法re API的计数参数。

(编辑)我仔细查看了您的代码 - 非常低效地使用 re

re.sub(r'(\^Qc)(\d)(})', '\033[0.3\\2m', line)

诀窍 - 你不需要字典,替换等

于 2013-11-07T05:57:45.393 回答