突出¶

发布时间 2023-09-13 12:49:43作者: linux星

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

您可以通过设置 on 或 来禁用突出显示,也可以通过在构造函数上设置来禁用突出显示,从而在任何地方禁用它。如果在构造函数上禁用突出显示,您仍然可以有选择地启用突出显示 on print/log。highlight=Falsehighlight=Falsehighlight=True

自定义荧光笔

如果默认突出显示不符合您的需求,您可以定义自定义荧光笔。执行此操作的最简单方法是扩展将样式应用于与正则表达式列表匹配的任何文本的类。

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

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")

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

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

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

虽然功能非常强大,但您还可以扩展其基类以实现用于突出显示的自定义方案。它包含一个传递给突出显示的方法。

下面是一个愚蠢的例子,用不同的颜色突出显示每个字符:

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

内置荧光笔

可以使用以下内置荧光笔。

  • 突出显示ISO8601日期时间字符串。

  • 突出显示 JSON 格式的字符串。