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

All*_*ExJ 2 python string replace strip python-3.x

我有一个像这样的字符串:

la lala 135 1039 921\r\n
Run Code Online (Sandbox Code Playgroud)

我无法删除\r\n.

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

我试着用.strip("\r\n").replace("\r\n", "")但没有...

Cor*_*den 7

>>> my_string = "la lala 135 1039 921\r\n"
>>> my_string.rstrip()
'la lala 135 1039 921'
Run Code Online (Sandbox Code Playgroud)

只需切片结束的替代解决方案,在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'
Run Code Online (Sandbox Code Playgroud)

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

re.sub(r'\r\n', '', my_string)
Run Code Online (Sandbox Code Playgroud)


Joh*_*ter 6

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

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

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

您可以在 Python Language Reference 的词法分析部分的String and Byte Literals小节中查看 Python 支持的转义序列列表。

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

if s.endswith("\\r\\n"):
    s = s[:-4]
Run Code Online (Sandbox Code Playgroud)

  • 这并不意味着如何删除字符的解决方案,而是为了说明为什么 OP 的解决方案不起作用。但你是对的,`.strip()` 在这里是不合适的。 (2认同)