如何在Python中突出显示regex匹配?

2024-06-17 16:31:46 发布

您现在位置: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)]

但是在输出字符串的过程中,如何强制终端更改这些跨距的颜色呢?在


Tags: isthiswheresentencelike句子abouttalk
2条回答

有几种终端颜色包可用,如termstyletermcolor。我喜欢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)

要给文本着色,可以使用ANSI转义码。在python中,您将执行以下操作来更改文本的颜色。在

print '\033[' + str(code) + 'm'

其中code是来自here的值。请注意,0将重置任何更改,30-37是颜色。所以基本上你需要在匹配前插入'\033['+str(code)+'m',然后插入'\033[0m'来重置终端。例如,以下内容将导致打印终端的所有颜色:

^{pr2}$

下面是一个你所要求的混乱的例子

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

相关问题 更多 >