如何在句子中突出显示正则表达式中的匹配?我想我可以使用匹配的位置,就像我从中得到的那样:
s = "This is a sentence where I talk about interesting stuff like sencha tea."
spans = [m.span() for m in re.finditer(r'sen\w+', s)]
但是如何强制终端在输出该字符串期间更改这些跨度的颜色?
答案 0 :(得分:10)
有几种终端颜色包可用,例如termstyle或termcolor。我喜欢colorama,它也适用于Windows。
以下是使用colorama执行所需操作的示例:
from colorama import init, Fore
import re
init() # only necessary on Windows
s = "This is a sentence where I talk about interesting stuff like sencha tea."
print re.sub(r'(sen\w+)', Fore.RED + r'\1' + Fore.RESET, s)
答案 1 :(得分:2)
要为文本添加颜色,您可以使用ANSI转义码。在python中,您将执行以下操作以从该点开始更改文本的颜色。
print '\033[' + str(code) + 'm'
其中代码是here的值。请注意,0将重置任何更改,30-37是颜色。所以基本上你想在匹配前插入'\ 033 ['+ str(代码)+'m',然后在'\ 033 [0m'之后重置你的终端。例如,以下内容应该会打印所有终端的颜色:
print 'break'.join('\033[{0}mcolour\33[0m'.format(i) for i in range(30, 38))
以下是您要求的
的混乱示例import re
colourFormat = '\033[{0}m'
colourStr = colourFormat.format(32)
resetStr = colourFormat.format(0)
s = "This is a sentence where I talk about interesting stuff like sencha tea."
lastMatch = 0
formattedText = ''
for match in re.finditer(r'sen\w+', s):
start, end = match.span()
formattedText += s[lastMatch: start]
formattedText += colourStr
formattedText += s[start: end]
formattedText += resetStr
lastMatch = end
formattedText += s[lastMatch:]
print formattedText