突出显示¶
Rich将自动突出显示文本中的模式,如数字、字符串、集合、布尔值、无,以及一些更奇特的模式,如文件路径、URL和UUID。
您可以通过设置以下两种方式禁用突出显示 highlight=False
在……上面 print()
或 log()
,或通过设置 highlight=False
在 Console
构造函数,该函数在任何地方都禁用它。如果在构造函数上禁用突出显示,您仍然可以有选择地 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."))
内置荧光笔¶
以下内置高亮笔可供选择。
ISO8601Highlighter
突出显示ISO8601日期时间字符串。JSONHighlighter
突出显示JSON格式的字符串。