1

我有以下代码:

import re

key = re.escape('#one #two #some #tests #are #done')
print(key)
key = key.split()
print(key)

和以下输出:

\#one\ \#two\ \#some\ \#tests\ \#are\ \#done
['\\#one\\', '\\#two\\', '\\#some\\', '\\#tests\\', '\\#are\\', '\\#done']

反斜杠怎么会重复?我只希望它们在我的列表中出现一次,因为我想在正则表达式中使用这个列表。

提前致谢!约翰

4

4 回答 4

1

每个只有一个反斜杠,但是在打印repr字符串时,它们会被复制(转义)——就像在使用字符串构建正则表达式时需要复制它们一样。所以一切都很好。

例如:

>>> len("\\")
1
>>> len("\\n")
2
>>> len("\n")
1
>>> print "\\n"
\n
>>> print "\n"


>>>
于 2012-08-31T22:07:23.933 回答
1

\ 字符是转义字符,即改变后续字符[s] 含义的字符。例如,“n”字符就是一个“n”。但是,如果您像“\n”一样对其进行转义,它就会变成“换行符”。因此,如果您需要使用 \ 文字,则需要使用...本身对其进行转义: \\

于 2012-08-31T22:12:58.220 回答
0

反斜杠不重复。要实现这一点,请尝试执行以下操作:

for element in key:
    print element

你会看到这个输出:

\#one\
\#two\
\#some\
\#tests\
\#are\
\#done

当您打印整个列表时,python 使用的表示形式不是按原样打印字符串,而是打印为 python 表达式(注意引号“”,它们不在字符串中)

要实际编码包含反斜杠的字符串,您需要复制该反斜杠。这就对了。

于 2012-08-31T22:08:09.697 回答
0

当您将列表转换为字符串(例如打印它)时,它会调用repr列表中包含的每个对象。这就是为什么您在第二行输出中获得引号和额外的反斜杠的原因。试试这个:

s = "\\a string with an escaped backslash"
print s       # prints: \a string with an escaped backslash
print repr(s) # prints: '\\a string with an escaped backslash'

repr调用在字符串周围加上引号,并显示反斜杠转义。

于 2012-08-31T22:16:48.077 回答