2011-03-10 172 views
2

我试图将一些文本提供给特殊的pupose解析器。这个解析器的问题在于它对()[]字符很敏感,在我的文章中有很多这样的字符。解析器手册提示所有()[]都被替换为\(\) \[ \]。所以使用str.replace我正在使用附加\所有这些charcaters。我用下面的代码:替换字符串中的特殊字符的问题

a = 'abcdef(1234)' 
a.replace('(','\(') 

但是我得到这个作为我的输出:

'abcdef\\(1234)' 

什么是错我的代码?任何人都可以提供给我一个解决方案来解决这些字符?

+0

看看:http://docs.python.org/library/re.html#re.escape也许它已经是你想要的了。 – mouad 2011-03-10 16:19:43

回答

3

这就是在REPL中打印转义字符(如反斜杠)的方式。字符串的实际值与您的预期相同。

>>> a = '\(' 
>>> a 
'\\(' 
>>> print(a) 
\(
1
suggests that all the()[] get replaced with \(\) \[ \] 

按照我的理解,解析器本身进行更换,因此,如果您输入:

'abcdef(1234)' 

输出将是:

'abcdef\(1234\)' 

所以,你必须解析输出,让您的原文为:

output.replace('\(','(').replace('\)',')')...... 

et c ...

4

你的代码没有问题。这是Python的方式告诉你,该字符串包含一个文字\,通过向您显示反斜杠已被转义为\\

这样你就可以知道你是否有两个字符,一个是\,其次是(,或者只是一个字符,转义括号\(

当您做print 'abcdef\\(1234)'时,您可能预计会看到您看到的内容。你想要的就是你已经拥有的东西。

相关问题