从替换不起作用的字符串中删除字符

时间:2016-12-29 12:20:25

标签: python string character-encoding

我有许多字符串,我的目标是使用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的时间。我怎么能这样做?

编辑:使用更好的示例更新代码。

4 个答案:

答案 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()

将它转换为不以“b”开头的unicode字符串