我有以下代码:
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']
为什么反斜杠是重复的?我只想在列表中输入一次,因为我想在正则表达式中使用此列表。
提前致谢!约翰
答案 0 :(得分:1)
每个 只有一个反斜杠,但是当打印字符串的repr
时,它们会被复制(转义) - 正如您在使用字符串时需要复制它们一样建立一个正则表达式。所以一切都很好。
例如:
>>> len("\\")
1
>>> len("\\n")
2
>>> len("\n")
1
>>> print "\\n"
\n
>>> print "\n"
>>>
答案 1 :(得分:1)
\ character是一个转义字符,它是一个改变后续字符[s]含义的字符。例如,“n”字符只是“n”。但如果你像“\ n”那样逃避它,它就会变成“换行”字符。因此,如果您需要使用\ literal,则需要使用...本身来转义它:\\
答案 2 :(得分:0)
反斜杠不重复。要实现这一点,请尝试:
for element in key:
print element
你会看到这个输出:
\#one\
\#two\
\#some\
\#tests\
\#are\
\#done
当你打印完整个列表时,python使用表示字符串打印的表示不是原样,但它们打印为python表达式(注意引号“”,它们不在字符串中)
要实际编码包含反斜杠的字符串,您需要复制该反斜杠。就是这样。
答案 3 :(得分: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
调用在字符串周围放置引号,并显示反斜杠转义。