【问题标题】:Forward slash in Python replace()Python replace() 中的正斜杠
【发布时间】:2011-05-12 18:13:30
【问题描述】:

我一直在研究 Python 2.7 中的字谜求解器,但遇到了一个我无法找到解释的好奇心。该程序从一个文件中读取,该文件包含一个字谜列表,格式如下:

#    anagram
#    anagram
#    anagram
.
.
.
etc

将其直接读入字符串,Python 显然会将所有内容都输出,所以我正在使用 replace() 试图找到一种方法来去除哈希字符。正在尝试...

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

...会产生一个空字符串。我尝试在哈希前面使用反斜杠,但弄错了一个正斜杠并打错了,这给了我结果:

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

当时删除不必要的字符是一件轻而易举的事,程序运行良好。但是,我不满足于使用我不完全理解的代码行。我没有太多运气找到任何解释/使我们成为这样的东西的文档或代码,所以我要么在寻找错误的地方,要么在寻找错误的东西。

谁能解释它为什么会这样?

【问题讨论】:

  • 在您的第二个示例中,replace 只是不替换任何内容并返回原始字符串,因为在您的文件中您没有 /# 序列。
  • # 仅在源代码中对 Python 是特殊的,而不是在从文件读取的字符串中。

标签: python string replace


【解决方案1】:

试试这个:

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

Python 不会以任何方式对字符串中的 # 进行特殊处理,您无需对其进行转义。

【讨论】:

    【解决方案2】:

    当您将 '#' 替换为 '/#' 时,您是否更改了其他任何内容?尝试再次运行您的程序,原样运行,但删除/# 不是 Python 字符串中的特殊字符。

    您向我们展示的代码在替换中没有任何作用,因为您的字符串中没有任何 '/#' 实例。

    交互式会话示例:

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

    【讨论】:

    • 感谢您的回复,纳通。像您提到的那样删除正斜杠会导致空白字符串。也没有进行其他更改。
    • @Vulpine:没有复制。显示您的实际文件内容。 replace 返回一个空字符串很特别。
    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2011-05-16
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多