我应该如何在句子中使用正则表达式来突出匹配项?我认为我可以使用匹配项的位置,就像我从以下代码中获取的位置一样:
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)]
但是我如何强制终端在输出该字符串时更改那些span的颜色?
要给文本上色,可以使用ANSI转义码。在Python中,您可以执行以下操作以从该点开始更改文本的颜色。
print '\033[' + str(code) + 'm'
在这里,code是来自这里的值。请注意,0将重置任何更改,30-37是颜色。因此,您想要在匹配之前插入'\033[' + str(code) + '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