无法从字符串中删除“\\r\\n”

新手上路,请多包涵

我有一个这样的字符串:

 la lala 135 1039 921\r\n

而且我无法删除 \r\n

最初这个字符串是一个字节对象,但后来我把它转换成字符串

我尝试了 .strip("\r\n").replace("\r\n", "") 但什么都没有……

原文由 Allexj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 936
2 个回答

问题是该字符串包含一个文字反斜杠后跟一个字符。通常,当写入诸如 .strip("\r\n") 类的字符串时,这些被解释为转义序列,其中 "\r" 表示回车(ASCII 表中的 0x0D)和 "\n" 表示换行 (0x0A)。

因为 Python 将反斜杠解释为转义序列的开头,所以您需要在它后面跟另一个反斜杠来表示您指的是文字反斜杠。因此,调用需要是 .strip("\\r\\n").replace("\\r\\n", "")

注意:你真的不想在这里使用 .strip() 因为它影响的不仅仅是字符串的结尾,因为它会从字符串中删除反斜杠和字母“r”和“n”。 .replace() 在这里要好一些,因为它会匹配整个字符串并替换它,但它也会匹配 \r\n 在字符串的中间,而不仅仅是结尾。删除序列的最直接的方法是下面给出的条件。

您可以在 Python 语言参考的词法分析部分的 字符串和字节文字 小节中查看 Python 支持的转义序列列表。

对于它的价值,我不会使用 .strip() 来删除序列。 .strip() 删除字符串中的所有字符(它将字符串视为一个集合,而不是模式匹配)。 .replace() 将是一个更好的选择,或者简单地使用切片符号删除尾随 "\\r\\n" 当您检测到它存在时关闭字符串:

 if s.endswith("\\r\\n"):
    s = s[:-4]

原文由 John Szakmeister 发布,翻译遵循 CC BY-SA 4.0 许可协议

>>> my_string = "la lala 135 1039 921\r\n"
>>> my_string.rstrip()
'la lala 135 1039 921'

仅切掉末尾的替代解决方案,它更适合 bytes->string 情况:

 >>> my_string = b"la lala 135 1039 921\r\n"
>>> my_string = my_string.decode("utf-8")
>>> my_string = my_string[0:-2]
>>> my_string
'la lala 135 1039 921'

或者地狱,即使是正则表达式解决方案,效果更好:

 re.sub(r'\r\n', '', my_string)

原文由 Cory Madden 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题