2012-08-31 56 views
1

右我已经下面的代码拆呢?我只希望他们在我的列表中有一次,因为我想在正则表达式中使用此列表。逃生绳和后

在此先感谢!约翰

回答

1

是每个只有一个反斜杠,但打印字符串的repr时,他们被复制(逃脱) - 就像你使用一个字符串来构建一个正则表达式时需要复制它们。所以一切都很好。

例如:

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


>>> 
+0

Aww我明白了,谢谢!另一个小问题:有没有办法告诉're.escape'不要逃离空格? –

+0

@JohnSmith:不,''re.escape()'[只是在每个非字母数字字符前打一个反斜杠](http://docs.python.org/library/re.html#re.escape)。这有点矫枉过正,但不应该伤害。实际上,如果在编译正则表达式时使用're.VERBOSE',则需要转义空格。 –

+0

在你的情况下,它确实受到了伤害,但是你可以很容易地解决这个问题:首先拆分,然后转义:'key = [key.split()]中item的[re.escape(item)]'。 –

0

反斜杠不重复。为了实现这一目标,努力做到:

for element in key: 
    print element 

你会看到这样的输出:

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

当您打印整个列表,蟒蛇用表示,其中字符串不打印为他们,但它们被打印为python表达式(注意引号“”,它们不在字符串中)

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

1

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

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调用把引号括起来的周围,并展示了反斜杠。