替换只是在我的Python脚本行中替换RegEx Match的第一个实例

时间:2013-11-07 05:49:25

标签: python regex replace

我正在尝试编写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")

1 个答案:

答案 0 :(得分:0)

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

(编辑) 我仔细研究了你的代码 - 使用re

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

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