NL)。在生成字符串时,应当进行“字符串转义”,才能准确识别字符串文字中\n的意思,如下表:| 字符串文字 | 字符串 | 说明 |
|---|---|---|
| \n | NL | 换行符 |
| \t | Tab | 制表符 |
| \\ | \ | 反斜线字符 |
\d,其正则文字包含\与d,它的意义(或者说值)是匹配数字字符的字符组简记法。在生成正则表达式时应当进行“正则转义”,才能将正则文字中的\d识别为字符组简记法
| 字符串文字 | 字符串/正则文字 | 正则表达式 | 说明 |
|---|---|---|---|
| \\n | \n | NL | 换行符 |
| \\t | \t | Tab | 制表符 |
| \\\ | \\ | \ | 反斜线 |
如下测试:
import rere.search("\\\\", '\\') is not None

| 字符串文字 | 字符串/正则文字 | 正则表达式 | 说明 |
|---|---|---|---|
| \\n | \n | NL | 换行符 |
| \n | NL | NL | 换行符 |
| \\t | \t | Tab | 制表符 |
| \t | Tab | Tab | 制表符 |
\\\\如下测试:
re.search('\\n','\n') is not None
re.search('\n','\n') is not None
re.search('\\t','\t') is not None
re.search('\t','\t') is not None

\b,在一般的字符串中,\b是预定义的转义序列,表示退格符(backspace,表示为BS);但是在正则表达式中,它表示的是单词边界(记为\B),如果在字符串文字中写\b,字符串转义为退格符,交给正则表达式,正则表达式真正的得到的是退格符BS,而不是单词边界\B如下举例:
re.search('\ba\b', 'a') is not Nonere.search('\\ba\\b', 'a') is not None

\\b,所以,在使用中最保险的方法是:正则表达式中的每一个\,在字符串文字中都要写成\\,如下表格:| 字符串文字 | 字符串/正则文字 | 正则表达式 | 说明 |
|---|---|---|---|
| \b | BS | BS | 退格符 |
| \\b | \b | \B | 单词边界 |
re.search('\d', '1') is not Nonere.search('\(', '(') is not None

\d与\(都不是合法的转义序列,为啥不会报错?这是因为python对字符串特殊的规定:如果遇到无法识别的转义序列,则将它原封不动的保存下来 如下表:| 字符串文字 | 字符串/正则文字 | 正则表达式 | 说明 |
|---|---|---|---|
| \\d | \d | \d | 字符组简记法 |
| \d | 无法识别,原样保存 | \d | 字符组简记法 |
# 在字符串之前使用 r 来标注原生字符串
pattern=re.compile(r"a\.\nb\b")
上述来看:如果可以使用原生字符串或者正则文字直接来表示正则表达式,应该尽量使用这种做法,因为其简单直观,方便理解,在此之前关于正则的博客以及此后的博客,如果能使用原生字符串表示正则表达式,则使用原生字符串,python示例为r"regex"
\d,正则文字中要写出\\d,而不是\d