Python replace() 中的斜杠

1 投票
2 回答
3849 浏览
提问于 2025-04-16 07:21

我在用Python 2.7写一个找字谜的程序,遇到了一些奇怪的事情,找不到解释。这个程序是从一个文件里读取字谜,文件里的格式大概是这样的:

#    anagram
#    anagram
#    anagram
.
.
.
etc

直接把这些内容读进一个字符串里,Python会把所有内容都当成注释,所以我试着用replace()这个方法,想找个办法把井号(#)去掉。尝试了...

string = file.read().replace('#', '')

...结果却得到一个空字符串。我本来想在井号前面加个反斜杠,但我搞错了,打成了正斜杠,结果得到了:

string = file.read().replace('/#', '')
string = '#\tanagram\n#\tanagram\n#\tanagram'

这时候去掉多余的字符就变得简单了,程序也正常工作了。不过,我不想用一行我完全不理解的代码。我找了很多文档和代码,但都没找到能解释这个现象的,所以我可能是在找错的东西或者方向。

有没有人能解释一下为什么会这样呢?

2 个回答

0

你在把 '#' 换成 '/#' 的时候,有没有做其他的改动?试着把你的程序再运行一遍,保持原样,但把 / 去掉。其实在Python字符串里,# 并不是一个特殊字符。

你给我们的代码在替换的时候其实没有做任何事情,因为你的字符串里根本没有 '/#' 这个内容。

下面是一个示例互动会话:

>>> "#foo bar\n\t#blah".replace("#", "")
'foo bar\n\tblah'
3

试试这个:

[s.lstrip('#\t') for s in file.read().split('\n')]

在Python中,字符串里的#符号并没有特别的处理,你不需要对它进行转义。

撰写回答