我有一个这样的字符串:
la lala 135 1039 921\r\n
我无法移除\r\n
。
最初这个字符串是一个字节对象,但后来我把它转换为字符串
我尝试使用.strip("\r\n")
和.replace("\r\n", "")
,但没有尝试......
答案 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等匹配的结束字符。