突出显示

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

您可以通过在 print()log() 上设置 highlight=False 来禁用突出显示,或者通过在 Console 构造函数上设置 highlight=False 来禁用所有地方的突出显示。如果在构造函数上禁用突出显示,您仍然可以在 print/log 上使用 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 [email protected]")

highlights 类变量应包含一个正则表达式列表。任何匹配表达式的组名都将以 base_style 属性为前缀,并用作匹配文本的样式。在上面的示例中,任何电子邮件地址都将应用“example.email”样式,我们已在自定义 Theme 中定义了该样式。

在 Console 上设置突出显示器将对您打印的所有文本应用突出显示(如果已启用)。您也可以通过将实例用作可调用对象并打印结果来在更细粒度的级别上使用突出显示器。例如,我们可以像这样使用电子邮件突出显示器类

console = Console(theme=theme)
highlight_emails = EmailHighlighter()
console.print(highlight_emails("Send funds to [email protected]"))

虽然 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."))

内置突出显示器

以下内置突出显示器可用。