如何在Python中高亮显示正则表达式匹配项?
我想知道怎么在句子中突出显示正则表达式匹配的部分。我想我可以用匹配的位置,就像我从这里得到的那样:
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)]
但是我该怎么让终端在输出这个字符串的时候改变那些部分的颜色呢?
2 个回答
15
有几个终端颜色的工具包可以使用,比如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))
4
要给文本上色,你可以使用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