maple412 发表于 2015-01-07 15:36

正则表达是的疑问

这个时候的\是转义\n,所以输出\n
>>> a="abc\\ncd"
>>> print a
abc\ncd

但是如果是下面的这种形式的话,输出如下,为啥abc后面还带一个\n并且分行了呢?
>>> a="abc\\\ncd"
>>> print a
abc\
cd

icymirror 发表于 2015-01-07 20:07

回复 1# maple412


    很简单,因为三个\时,前面两个合成一个转义,就是输出一个\,而后面的\n也合成了一个转义,就是输出一个回车。

HH106 发表于 2015-01-08 09:35

2楼正解,话说多个\转义很麻烦,善用r''

maple412 发表于 2015-01-08 15:36

回复 2# icymirror

如果是这样的话 那不就是变成\\n,第一个\也会转义\n啊
   

icymirror 发表于 2015-01-08 17:34

回复 4# maple412
转义不是递归的,是由左向右扫描进行的。
所以,扫描、解释过程是:
遇到\,开始进入转义过程,根据下一个字符进行相应转义。
然后继续扫描。

而不是转义之后,扫描过程后退进行重新扫描。
可以明白嘛?
   

maple412 发表于 2015-01-08 20:01

回复 5# icymirror

\\\n的意思就是首先\\转义成\,然后扫描下一个字符为\n,而不是接着继续转义\n?可不可以理解为转义不是持续进行的?
   

icymirror 发表于 2015-01-09 08:23

回复 6# maple412
转义是调用一次,进行一次一遍性扫描的。
而不是反复进行的。

所以,如果你的转义之后的字符串如果是另外一次转义过程的输入的话,才会出现你开始理解的情况。
但是,如果只是一次性输出的话,就没有第二次转义的情况出现。

maple412 发表于 2015-01-09 14:49

回复 7# icymirror


    所以,如果你的转义之后的字符串如果是另外一次转义过程的输入的话,才会出现你开始理解的情况。
另外一次转移过程的输入是什么意思,能举个例子吗
但是,如果只是一次性输出的话,就没有第二次转义的情况出现。
一次性输出怎么理解?

jason680 发表于 2015-01-15 11:50

回复 8# maple412

>>> a="abc\\ncd"
>>> print a
abc\ncd
>>> a="abc\\\ncd"
>>> print a
abc\
cd
>>> a="abc\\tcd"
>>> print a
abc\tcd
>>> a="abc\\\tcd"
>>> print a
abc\    cd
>>> a="abc\t\\cd"
>>> print a
abc    \cd


Note: \n is new line, \t is tab key
页: [1]
查看完整版本: 正则表达是的疑问