注册 登录
编程论坛 Python论坛

关于\的问题

fall_bernana 发布于 2019-08-16 17:42, 2113 次点击
程序代码:

>>> a="\'"
>>> a
"'"
>>> a="\\\'"
>>> a
"\\'"
>>> a="\\\\'"
>>> a
"\\\\'"
>>> a="\\\\\'"
>>> a
"\\\\'"
>>> a="\\\\\\'"
>>> a
"\\\\\\'"
>>> a="\\\\\\\'"
>>> a
"\\\\\\'"
>>> a="\\\\\\\\'"
>>> a
"\\\\\\\\'"

这里的\为什么只会出现双数,不会有单数的情况?
我在re.sub(r'\\','\\\\',a) 里 想把一个\改成2个\,但是失败了.这个该怎么写?

[此贴子已经被作者于2019-8-16 17:45编辑过]

3 回复
#2
TysonKoothra2019-08-16 20:57
用print就看出来单数的情况了。
程序代码:

>>> print('\\')
\
>>> print('\\\\')
\\
>>> print('\\\\\\')
\\\
#3
TysonKoothra2019-08-16 21:20
re.sub(r'\\','\\\\',a) 第二个参数少一个r。re.sub(r'\\',r'\\\\',a)
#4
fall_bernana2019-08-19 10:47
回复 3楼 TysonKoothra
版主的答案是对的,但是原因没有讲透.我检测如下,希望指正

re.sub(pattern, repl, string, count=0, flags=0)
程序代码:

>>> a='Morton\\\'s'
>>> print (a)
Morton\'s

>>> b=re.sub(r'([\\]\')',r'\\\\\'\j\?\.',a)
>>> print(b)
Morton\\\'\j\?\.s


#在pattern里,\\会解释成\,\'会解释成' ,但是在repl里,如果使用r'' , 表达式会把\\解释成一个\,\'解释成\',\j解释成\j.
#
所以我的问题可以用b=re.sub(r'([\\]\')',r'\\\'',a)来解决


>>> c='\'\j\?\.'
>>> print (c)
'\j\?\.
>>> b=re.sub(r'(\\\')','\'\j\?\.',a)
>>> print(b)
Morton'\j\?\.s
----------------------------------
>>> c='\\\'\j\?\.'
>>> print (c)
\'\j\?\.
>>> b=re.sub(r'(\\\')','\\\'\j\?\.',a)
>>> print (b)
Morton\'\j\?\.s
-----------------------------------
>>> c='\\\\\'\j\?\.'
>>> print (c)
\\'\j\?\.
>>> b=re.sub(r'(\\\')','\\\\\'\j\?\.',a)
>>> print (b)
Morton\'\j\?\.s
-----------------------------------
>>> c='\\\\\\\'\j\?\.'
>>> print (c)
\\\'\j\?\.
>>> b=re.sub(r'(\\\')','\\\\\\\'\j\?\.',a)
>>> print (b)
Morton\\'\j\?\.s
------------------------------------

从这里总结出,在如果不使用r'' ,repl会先转成字符串,这里\'会转成' ,也就是先转成c的值,再在c的基础上\\转成\, \'转成\' .

希望这个对跟我碰到相同问题的人有点帮助.多谢版主

[此贴子已经被作者于2019-8-19 10:58编辑过]

1