我有一个这样的字符串:
la lala 135 1039 921\r\n
而且我无法删除 \r\n
。
最初这个字符串是一个字节对象,但后来我把它转换成字符串
我尝试了 .strip("\r\n")
和 .replace("\r\n", "")
但什么都没有……
原文由 Allexj 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个这样的字符串:
la lala 135 1039 921\r\n
而且我无法删除 \r\n
。
最初这个字符串是一个字节对象,但后来我把它转换成字符串
我尝试了 .strip("\r\n")
和 .replace("\r\n", "")
但什么都没有……
原文由 Allexj 发布,翻译遵循 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 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
问题是该字符串包含一个文字反斜杠后跟一个字符。通常,当写入诸如
.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"
当您检测到它存在时关闭字符串: