关于正则表示式转义次数问题
正则表达式的字符串和普通字符串(可以是各种语言环境,python/java/sql等)在使用上有一点区别:
在处理包含反斜杠’\'时,正则表达式会经过两次转义,而普通字符串只需要一次转义。
具体地说
对于普通字符串,一般会有换行\n、回车\r、制表符\t、或者\0,\1等转义,而对于正则表达式,就多了空格符号\s,反空格符号\S,数字\d,单个字符\w等。正是如此,正则表达式需要自己再在普通字符串的基础上进行一次转义,并拥有独立的解析引擎。
因此
当我们需要匹配原始字符,即不转义的普通字符串,比如’\n’等,那么就需要避开两次转义,那么就需要使用四次反斜杠,‘\\n’。或者当我们需要匹配正则表达式特有而普通字符串没有的转义符时,比如’\s’,但这里对于不同语言环境不太一样,对于python,则不需要避开普通字符串的转义(这里对于不存在的转义情况就等效于单个反斜杠+原本字符),所以自然而然地变成来’\s’,而对于sql,不存在转义的情况就等效于去掉反斜杠后的字符,所以需要使用’\s’,使得经过普通字符串转义后传递到正则引擎时是理想的待转义的样子。
简化
对于python,如果我们不想写很多反斜杠的话,我们可以使用r’xxx’来表示不经过普通字符串转义的结果,那么我们只需要考虑正则表达式的一次转义就好,而这个是比较容易考虑的。比如,如果想要匹配换行符,那么就是r’\n’,如果想要匹配非转义换行(反斜杠+n),那么就是r’\n’,如果想要匹配任意空格符,那么就是r’\s’,其他同理。
调用正则匹配函数的参数写法
在使用正则匹配时,无论是什么语言环境,一般会让给出待匹配字符串,匹配模式字符串,前者的话只需要经过普通字符串的转义,后者的话就会经过两次转义,所以书写的时候需要注意。