突出显示

Rich将自动突出显示文本中的模式,如数字、字符串、集合、布尔值、无,以及一些更奇特的模式,如文件路径、URL和UUID。

您可以通过设置以下两种方式禁用突出显示 highlight=False 在……上面 print()log() ,或通过设置 highlight=FalseConsole 构造函数,该函数在任何地方都禁用它。如果在构造函数上禁用突出显示,您仍然可以有选择地 enable 使用突出显示 highlight=True 在打印/日志上。

自定义高光笔

如果默认高亮显示不符合您的需要,您可以定义一个自定义高亮显示笔。执行此操作的最简单方法是将 RegexHighlighter 类的新实例,该类将样式应用于与正则表达式列表匹配的任何文本。

以下是突出显示看起来像电子邮件地址的文本的示例::

from rich.console import Console
from rich.highlighter import RegexHighlighter
from rich.theme import Theme

class EmailHighlighter(RegexHighlighter):
    """Apply style to anything that looks like an email."""

    base_style = "example."
    highlights = [r"(?P<email>[\w-]+@([\w-]+\.)+[\w-]+)"]


theme = Theme({"example.email": "bold magenta"})
console = Console(highlighter=EmailHighlighter(), theme=theme)
console.print("Send funds to money@example.org")

这个 highlights 类变量应包含正则表达式列表。任何匹配表达式的组名都带有前缀 base_style 属性,并用作匹配文本的样式。在上面的示例中,任何电子邮件地址都将应用我们在自定义的 Theme

在控制台上设置高亮笔将突出显示您打印的所有文本(如果启用)。您还可以通过将实例用作可调用对象并打印结果,从而在更精细的级别上使用高亮笔。例如,我们可以像这样使用电子邮件突出显示类::

console = Console(theme=theme)
highlight_emails = EmailHighlighter()
console.print(highlight_emails("Send funds to money@example.org"))

而当 RegexHighlighter 功能相当强大,您还可以扩展其基类 Highlighter 实现用于突出显示的自定义方案。它包含一个方法 highlight ,它被传递给 Text 以突出显示。

这里有一个愚蠢的例子,用不同的颜色突出显示每个字符::

from random import randint

from rich import print
from rich.highlighter import Highlighter


class RainbowHighlighter(Highlighter):
    def highlight(self, text):
        for index in range(len(text)):
            text.stylize(f"color({randint(16, 255)})", index, index + 1)


rainbow = RainbowHighlighter()
print(rainbow("I must not fear. Fear is the mind-killer."))

内置荧光笔

以下内置高亮笔可供选择。