我有许多字符串,我的目标是使用replace删除charactars。然而,这种剂量似乎在醒来。举一个简化的例子,这段代码:
row = "b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38'"
row = row.replace("b'", "").replace("'", "").replace('b"', '').replace('"', '')
print(row.encode('ascii', errors='ignore'))
仍然输出b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38'
这个我希望它输出James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38
的时间。我怎么能这样做?
编辑:使用更好的示例更新代码。
答案 0 :(得分:2)
你似乎误以为双引号的单引号。简单替换 'b
:
>>> row = "xyz'b"
>>> row.replace("'b", "")
'xyz'
作为str.replace
的替代方法,您可以简单地切片字符串,以删除不需要的前导和尾随字符:
>>> row[2:-1]
'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38'
答案 1 :(得分:1)
在您的第一个.replace
中,将b'
更改为'b
。因此,您的代码应该是:
>>> row = "xyz'b"
>>> row = row.replace("'b", "").replace("'", "").replace('b"', '').replace('"', '')
# ^ changed here
>>> print(row.encode('ascii', errors='ignore'))
xyz
我假设您拥有的其他条件是您在此处未提及的其他任务/比赛的一部分。
如果您只想在第一个'
之前获取字符串,那么您可以这样做:
row.split("'")[0]
答案 2 :(得分:0)
您尚未列出此消息以删除'b
:
.replace("'b", '')
答案 3 :(得分:0)
import ast
row = "b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38'"
b_string = ast.literal_eval(row)
print(b_string)
u_string = b_string.decode('utf-8')
print(u_string)
出:
b_string:b'James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38'
u_string: James Bray,/citations?user=8IqSrdIAAAAJ&hl=en&oe=ASCII,1985,6020,188.12,42,1.31,76,2.38
真正的问题是如何将字符串转换为python对象。
你得到一个包含二进制字符串的字符串,要将它转换为python的二进制字符串对象,你应该使用eval()
。 ast.literal_eval()
是更安全的方式。
现在你得到一个二进制字符串,你可以使用decode()