Python字符串和正则表达式中的反斜杠(& # 39;\ & # 39;)问题详解

  

在Python普通字符串中
  

  

在Python中,我们用“\”来转义某些普通字符,使其成为特殊字符,比如

        在[1]:打印(abc \ ndef) # ' \ n '具有换行的作用   美国广播公司   defg      在[2]:打印(abc \ tdef) # \ t的具有制位符的作用   abc defg      

我们还可以用“\”来转义特殊字符,使其成为普通字符,比如

        在[3]:打印(abc \ \ tdef) #使“\”成为一个普通的字符,没有转义作用   abc \ tdef      在[4]:打印(“abc \“tdef”) #使“成为一个普通的字符,不再需要和另一半单引号“配对   abc 'tde      

所以,在python普通字符串中,我们不能以奇数个“\”结尾,这样会导致结束的的引号转义成一个纯字符,从而使得这段字符串没有引号来结束。

  

<强>在Python原生字符串中
  

  

我们在字符串前加一个“r”来表示原生字符串,比如r 'abc”。原生字符串中的特殊字符的特殊含义将会被剥夺掉,如下

        在[5]:打印(r 'abc \ ndefg”) # ' \ n '没有换行的作用,仅仅是一个普通的字符串   abc \ ndefg      在[6]:打印(r 'abc \ tdefg”) # ' \ t '没有制位符的作用,仅仅是一个普通的字符串   abc \ tdef      

这里有一个奇怪的问题,在原生字符串中,虽然“\”成为了一个普通的字符串,但我们同样不能以奇数个“\”字符串结尾,这是因为Python正则表达式的原因,在正则表达式中我们将会解释这个问题。

  

<强>在Python(正则表达)正则表达式中
  

  

Python正则表达式中会有一些不同,正则表达式中指定了一些元字符(元字符),如下

        。^ $ * + & # 63;{}[]\ | ()      

它们都具有特殊的含义,“\”也属于元字符“\”。既属于Python中的特殊字符,也属于正则中的元字符,所以使用时得非常小心。那么在正则中,“\”的作用是什么呢?我们看一个例子

        在[7]:re.search ('。”、“sd.f”)   [7]:& lt; _sre。SRE_Match对象;跨度=(0,1),配=s比;      在[8]:re.search (‘\。”、“sd.f”)   [8]:& lt; _sre。SRE_Match对象;跨度=(2、3),配='。'祝辞;[9]:re.search (“\ n”、“sdfd \ nfds”) [9]: & lt; _sre。SRE_Match对象;跨度=(4、5),配=' \ n '比;      ”“”   “。”作为一个元字符,它的特殊含义是匹配任意一个字符,而当我们在其前面加“\”后,它的特殊含义消失了,匹配到的是“。”,而且“\”依然可以把Python中某些字符转义成特殊字符。   " " "      

所以,“\”的作用是剥夺元字符的特殊含义,使其成为一个Python字符,所以它还是会具有在Python普通字符串中的转义作用,比如“\ n”依然表示换行。所以,“\”既是正则中的一个元字符,又是Python中的一个特殊字符。那么我们该如何匹配到纯字符“\”(无任何特殊意义)?

  

在正则中,“\”的作用是把元字符转义成Python字符串文字(Python字符串),所以正则中的“\ \”其实是其实是Python字符中的“\”,它仍然还具有转义作用,所以在正则中我们还得对每个' \ '再进行转义一次,即“\ \ \ \”,这样就可以匹配到纯字符“\”了。看下面例子

        在[10]:re.search(“\ \ \ \”,“女性性功能障碍\ nfds”) #目标字符串中没有纯字符“\”,所以匹配为空      在[11]:re.search(“\ \ \ \”,“女性性功能障碍\ \ nfds”)   [11]:& lt; _sre。SRE_Match对象;跨度=(3、4),配=' \ \ '比;# Python字符串中,“\ \”就是纯字符“\”      

在再保险中反复的使用“\”,这可能会生成大量的连续的反斜杠,从而导致某些字符串难以理解。解决的办法是用Python原生字符串来书写正则表达式,如下

        在[12]:re.search (r“\ \”,“女性性功能障碍\ \ nfds”) #两个“\ \”就可以匹配到纯字符“\”   [12]:& lt; _sre。SRE_Match对象;跨度=(3、4),配=' \ \ '在      

另外,当我们用原生字符串来书写正则表达式时,Python字符中的特殊字符依然有效,比如

        在[13]:re.search (r ' \ n ', '女性性功能障碍\ nfds ')   [13]:& lt; _sre。SRE_Match对象;跨度=(3、4),配=' \ n '比;   ”“”   在Python字符中,r ' \ n '仅仅表示纯字符串' \ n ',没有换行的作用;在正则中,r ' \ n '依然还有换行的作用,所以此时我们不能用奇数个' \ '来结尾某个正则表达式,这样导致结束的引号被转义成一个纯字符,无结束符号,所以,在Python原生字符串中,我们也同样规定不能用奇数个' \ '来结尾。   " " "

Python字符串和正则表达式中的反斜杠(& # 39;\ & # 39;)问题详解