字符串字面量、字符字面量¶
开头和结尾
'字符字面量"字符串字面量`格式化字符串字面量'''原始字符串字面量"""多行字符串字面量```多行格式化字符串字面量
反斜杠转义¶
使用反斜杠进行转义,转义序列均使用小写字母表示。
注意:除原始字符串字面量外都可以使用转义序列。
| 转义序列 | 名称 | 八进制 | 十六进制 | 解释 |
|---|---|---|---|---|
\0 |
NUL | 000 | 00 | 空字符 (NUL) |
\a |
BEL | 007 | 07 | 响铃 |
\b |
BS | 010 | 08 | 退格 |
\e |
ESC | 033 | 1b | 转义 |
\f |
FF | 014 | 0c | 换页 |
\n |
LF | 012 | 0a | 换行 |
\r |
CR | 015 | 0d | 回车 |
\t |
TAB | 011 | 09 | 水平制表符 |
\v |
VT | 013 | 0b | 垂直制表符 |
\x |
- | - | - | 十六进制转义 |
\u |
- | - | - | Unicode 转义 |
\\ |
\ |
134 | 5c | 反斜杠 |
\' |
' |
047 | 27 | 单引号 |
\" |
" |
042 | 22 | 双引号 |
\` |
` |
140 | 60 | 反引号 |
\$ |
$ |
044 | 24 | 美元符号 |
\000八进制转义 (三位八进制数,可省略前导0)
如:\0表示空字符,\033表示 ESC\x00十六进制转义 (两位十六进制数,长度固定)
如:\x20表示空格,\x1b表示 ESC\u0000Unicode 转义 (四位十六进制数,长度固定)
如:\u0020表示空格,\u001b表示 ESC
其中 \x 用于插入单个 byte,\u 用于插入单个 Unicode 字符。
在 u16 或 u32 字符串中,如果使用 \x 插入的 byte 不是成对(2 个)或成组(4 个)连续出现,将给出警告:后续文本内容可能产生编码错误。
只允许使用上述转义序列,其它任何 \ 后的字符组合都会导致报错。
在字符字面量中,转义结果必须恰好是一个字符/码点,否则报错。
\x 与 \u 仅按固定长度插入原始数值,不要求生成合法的 Unicode 字符。
普通字符串中禁止出现 \0(空字符);该转义仅允许出现在字节串中。
在 \ 后添加括号来插入 Unicode 码点,例如 \[1f600] 表示 😀 字符。
四种括号形式均可使用:()、[]、{}、<>。
数字使用十六进制表示,长度不限,可以有前导零。
该码点必须是合法的 Unicode 字符。
字符串前缀¶
字符串前缀用于表示字符串的类型,前缀后接字符串字面量。
- 无前缀,默认为 UTF-8 编码字符串,但如果内部包含无效的 UTF-8 序列则报错
u8UTF-8 编码字符串u16UTF-16 编码字符串u32UTF-32 编码字符串
cC 风格字符串(以空字符\0结尾)c8UTF-8 编码 C 风格字符串c16UTF-16 编码 C 风格字符串c32UTF-32 编码 C 风格字符串
r正则表达式r8UTF-8 编码正则表达式r16UTF-16 编码正则表达式r32UTF-32 编码正则表达式
b字节串(内容规则与默认字符串一致,仅类型为字节数组)b8UTF-8 编码字节串b16UTF-16 编码字节串b32UTF-32 编码字节串
h十六进制字节串(每两个十六进制字符表示一个字节;内容仅允许[0-9A-Fa-f]与空格/制表/换行,其他字符一律报错)任意编码标识符自定义编码字符串(如gbk、shift_jis等)
格式化表达式¶
使用类似 shell 的格式化写法,使用 $变量名 ${表达式} $表达式%格式修饰符 ${表达式}%格式修饰符 四种形式。
与其它情况下大括号表示代码块不同,此处大括号内为单个表达式,表达式也不可以换行。
转义会先于格式化解析。
`$a + $b = ${a + b}`
`Pointer ptr is: $ptr%p`
要在格式化字符串中表示 $ 可以使用 $$ 进行转义。
`The price of $item is $$5.00`
非法的序列中 $ 会被保留。
`$ $ $`
格式修饰符¶
格式修饰符以 % 开头,后接修饰符序列。
| 修饰符 | 说明 |
|---|---|
d |
十进制整数 |
x |
十六进制整数(小写字母) |
X |
十六进制整数(大写字母) |
o |
八进制整数 |
b |
二进制整数 |
f |
浮点数(默认小数点后 6 位) |
e |
科学计数法表示的浮点数(小写字母 e) |
E |
科学计数法表示的浮点数(大写字母 E) |
g |
根据数值大小自动选择 %f 或 %e 格式 |
G |
根据数值大小自动选择 %f 或 %E 格式 |
s |
字符串 |
c |
字符 |
p |
指针地址(通常以十六进制表示) |
原始字符串¶
原始字符串以 ''' 开头和结尾,开头的 ''' 后必须换行,结尾的 ''' 前必须换行。
原始字符串中不能使用转义序列。
开头的 ''' 后可以直接连接一个标识符,这样结尾的 ''' 后也必须直接连接相同的标识符。
这可以用于防止字符串中出现的 ''' 被误认为是字符串结尾。
直接书写多行内容:
'''
line1
line2
line3
'''
使用自定义标识符:
'''RAW_STR
This is a raw string.
It can contain ''' without ending the string.
'''RAW_STR
多行字符串¶
多行字符串和单行字符串类似,只是使用 """ 或 ``` 包裹字符串。
新行以 | 开头,续行以 + 开头,添加空格并续行以 * 开头,其后均必须加一个空格,否则会导致词法错误。
单个 | 表示空行,其后无需加空格。
该规则用于让换行更简单:+ 适合需要显式保留单词间空格的语言,* 适合不需要额外空格的语言,| 则表示普通换行。
""" | line1
| line2
| line3
"""
使用 + 时需要多打一个空格来使单词之间分割,但使用 * 时不需要。
""" | This is the
+ first line.
| This is the second line.
"""
""" | This is the
* first line.
| This is the second line.
"""
以上两个均被解析为:
This is the first line.
This is the second line.
也可以正常使用格式化表达式。
``` | $a + $b = ${a + b}
| $c + $d = ${c + d}
```
多行字符串必须跨行
相关内容:字符串类型见 类型系统。