控制台标记

Rich支持一个简单的标记,您可以使用该标记在Rich接受字符串的几乎所有位置插入颜色和样式(例如 print()log() )。

运行以下命令以查看一些示例:

python -m rich.markup

语法

控制台标记使用的语法灵感来自 bbcode 。如果您编写样式(请参见 样式 )在方括号中,例如 [bold red] ,这种风格将一直适用到 closed 具有对应的 [/bold red]

下面是一个简单的例子::

from rich import print
print("[bold red]alert![/bold red] Something happened")

如果不关闭样式,它将一直应用到字符串的末尾。如果您想设置一条线的样式,这有时会很方便。例如::

print("[bold italic yellow on red blink]This text is impossible to read")

关闭一种样式有一种速记。如果在结束标记中省略了样式名称,Rich将结束最后一个样式。例如::

print("[bold red]Bold and red[/] not bold or red")

这些标记标记可以相互组合使用,不需要严格嵌套。下面的示例演示标记标签的重叠:

print("[bold]Bold[italic] bold and italic [/bold]italic[/italic]")

错误

富豪将筹集资金 MarkupError 如果标记包含以下错误之一:

  • 不匹配的标签,例如 "[bold]Hello[/red]"

  • 没有匹配的隐式关闭标记,例如 "no tags[/]"

逃脱

有时,您可能希望打印一些Rich会解释为标记的内容。你可以的 escape 在标签前面加一个反斜杠。以下是一个示例:

>>> from rich import print
>>> print(r"foo\[bar]")
foo[bar]

如果没有反斜杠,里奇会认为 [bar] 是一个标记,如果没有“bar”样式,则将其从输出中删除。

备注

如果要防止反斜杠转义标记,并在标记前输出文字反斜杠,则可以输入两个反斜杠。

该功能 escape() 将为您处理文本转义。

如果动态构造控制台标记,则转义非常重要 str.format 或f字符串(例如)。在不转义的情况下,可能会在您不需要的地方注入标记。请考虑以下功能:

def greet(name):
    console.print(f"Hello {name}!")

叫唤 greet("Will") 会打印问候语,但如果你打电话来 greet("[blink]Gotcha![/blink]") 然后你还会得到闪烁的文本,这可能不是你想要的。解决方案是避开以下争论::

from rich.markup import escape
def greet(name):
    console.print(f"Hello {escape(name)}!")

表情符号

如果您将一个 emoji code 为了进行标记,它将被替换为等效的Unicode字符。表情符号代码由用冒号(:)括起来的表情符号的名称组成。以下是一个示例:

>>> from rich import print
>>> print(":warning:")
⚠️

一些表情符号有两种变体,“emoji”变体以全色显示,而“Text”变体以单色显示(无论您的默认颜色设置为什么)。您可以通过添加以下任一项来指定所需的变量 "-emoji""-text" 表情符号的代码。下面是一个例子:

>>> from rich import print
>>> print(":red_heart-emoji:")
>>> print(":red_heart-text:")

要查看所有可用表情符号的列表,请运行以下命令:

python -m rich.emoji

呈现标记

默认情况下,当您将字符串显式传递给时,Rich将呈现控制台标记 print() 或在将字符串嵌入另一个可呈现对象(如 TablePanel

控制台标记很方便,但如果语法与要打印的字符串冲突,您可能希望禁用它。您可以通过设置 markup=Falseprint() 方法或在 Console 构造函数。

标记API

通过调用,可以将字符串转换为带样式的文本 from_markup() ,它返回一个 Text 实例,您可以向其中打印或添加更多样式。