Как выделить совпадения с регулярными выражениями в Python? - PullRequest
4 голосов
/ 23 августа 2011

Как я могу выделить совпадения в регулярном выражении в предложении? Я полагаю, что я мог бы использовать местоположения матчей, как я мог бы получить из этого:

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 ]

10 голосов
/ 23 августа 2011

Доступно несколько терминальных цветовых пакетов, таких как 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)
2 голосов
/ 23 августа 2011

Для цветного текста вы можете использовать ANSI Escape коды.В Python вы должны сделать следующее, чтобы изменить цвет текста с этого момента.

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

Где код является значением от здесь .Обратите внимание, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...