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

时间:2017-07-29 00:04:11

标签: python string python-3.x replace strip

我有一个这样的字符串:

la lala 135 1039 921\r\n

我无法移除\r\n

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

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

4 个答案:

答案 0 :(得分:6)

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

替代解决方案,只需切片结束,这对bytes->字符串情况更有效:

>>> 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)

答案 1 :(得分:3)

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

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

您可以在Python语言参考中的词法分析部分的String and Byte Literals小节中看到Python支持的转义序列列表。

对于它的价值,我不会使用.strip()删除序列。 .strip()删除字符串中的所有字符(它将字符串视为一个集合,而不是模式匹配)。 .replace()是一个更好的选择,或者只是使用切片表示法来检测字符串中的尾随"\\r\\n"

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

答案 2 :(得分:1)

'\ r \ n'也是.splitlines()的标准行定界符,因此也可以使用。

>>> s = "la lala 135 1039 921\r\n"
>>> type(s)
<class 'str'>
>>> t = ''.join(s.splitlines())
>>> t
'la lala 135 1039 921'
>>> type(t)
<class 'str'>

答案 3 :(得分:0)

您还可以确定字符串的长度为20个字符,然后将其截断为18,而不管最后两个字符,或者在执行此操作之前验证它们是否为字符。有时,比较ascii值的第一个伪逻辑是有帮助的:

如果字符串中的最后一个字符是tab,cr,lf还是?然后将字符串缩短一个。重复,直到你不再找到与tab,cr,lef等匹配的结束字符。