正则表达式——其他
第 6 章 其他
6.1 转义
正则表达式中的转义的是个麻烦的问题,经常会搞得人头疼。虽然之前各章都提到了转义,仍然有必要专门介绍。
6.1.1 字符串转义与正则转义
理解转义的基础是,明白字符串与正则表达式的关系。通常说的string(字符串)中,string称为字符串文字(String Literal),它是某个字符串的值在源代码的表现形式。
字符串文字 | 字符串 | 说明 |
---|---|---|
\n | NL |
换行符 |
\t | Tab |
制表符 |
\||反斜线字符 |
另一方面,在源代码中看到的“正则表达式”regex,其中的regex称为正则表达式文字(Regular Expression Literal,以下简称正则文字),是正则表达式的表现形式。
从字符串文字到正则表达式的转换
字符串文字 | 字符串/正则文字 | 正则表达式 | 说明 |
---|---|---|---|
\\n | \n | NL |
换行符 |
\\t | \t | Tab |
制表符 |
\\\|\||反斜线字符 |
总的来看,转义的情况确实很复杂,我推荐的做法是:
第一,如果可以使用原生字符串或者正则文字直接表示正则表达式,应当尽量使用这种做法,因为它简单直观,方便理解;而且,本书从此开始,如果能使用原生字符串表示正则表达式,则使用原生字符串,在 Python 示例代码中使用r"regex"的形式,
第二,如果确实必须使用字符串文字,请尽量坚持这条原则:正则表达式中的每个反斜线\
,在字符串文字中都必须写成\\
,只有\n
、\t
中的反斜线例外(但是\\n
和\\t
也不难理解);我不推荐使用语言自身提供的“字符串转义时将无法识别的转义序列保留下来”的规定——比如要在正则表达式中使用自负责简记法\d
,正则文字中要写为\\d
,而不是\d
——这样有利于使用其他语言的程序员阅读。