字符串字面量、字符字面量¶
开头和结尾
'字符字面量"字符串字面量`格式化字符串字面量'''原始字符串字面量"""多行字符串字面量```多行格式化字符串字面量
反斜杠转义¶
使用反斜杠进行转义,转义序列均使用小写字母表示。
除原始字符串字面量外都可以使用转义
| 原始 | 字符 | 八进制 | 十六进制 | 解释 |
|---|---|---|---|---|
\0 |
NUL | 000 | 00 | 字符串结束 |
\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
\ 加其它字符则忽略 \ 本身,其后的字符直接以原始字符的形式加入字符串,如 \' 表示 ' 字符。
不过我们默认只允许用 \\ \' \" \` $ 这几种转义来表示原始字符,其它的字符会导致报错。
在 \ 后添加括号来插入 Unicode 码点,例如 \[1f600] 表示 😀 字符。
四种括号形式均可使用:()、[]、{}、<>。
数字使用十六进制表示,长度不限,可以有前导零。
字符串前缀¶
字符串前缀用于表示字符串的类型,前缀后接字符串字面量。
- 无前缀,默认为 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十六进制字节串(每两个十六进制字符表示一个字节)任意编码标识符自定义编码字符串(如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}
```
多行字符串必须跨行