python字符串删除特定字符串开始的所有_在Python中从字符串中删除特定字符

本文探讨了Python中字符串的不可变性,解释了为何`line.replace(...)`不会直接修改原字符串,而需要重新赋值。介绍了使用`translate()`和`re.sub()`方法删除特定字符的方法,以及在Python 2.x和3.x中处理Unicode字符串的差异。内容还涵盖了Unicode字符串在Python 3中的处理,包括如何创建转换表来删除指定字符。
摘要由CSDN通过智能技术生成

Python中的字符串是不可变的(不能更改)。因此,line.replace(...)的效果只是创建一个新字符串,而不是更改旧字符串。您需要将其重新绑定到line(assign)以便让该变量接受新值,并删除这些字符。

而且,你做这件事的方式会比较慢,相对来说。对于经验丰富的Python来说,这也可能有点让人困惑,因为它们会看到一个双重嵌套的结构,并会想一想,更复杂的事情正在发生。

从Python2.6和更新的Python2.x版本*开始,您可以改为使用^{}(但请继续阅读Python3的区别):line = line.translate(None, '!@#$')

或者用^{}替换正则表达式import re

line = re.sub('[!@#$]', '', line)

括号中的字符构成字符类。类中的line中的任何字符都将替换为sub的第二个参数:空字符串。

在Python 3中,字符串是Unicode。你得换个说法。kevpie在其中一个答案的comment中提到了这一点,并在documentation for ^{}中指出了这一点。

当调用Unicode字符串的translate方法时,不能传递上面使用的第二个参数。也不能将None作为第一个参数传递,甚至不能传递string.maketrans中的转换表。相反,您将字典作为唯一的参数传递。本词典将字符的序数值映射到应该替换它们的字符的序数值(即对它们调用^{}的结果),或者有效地映射到我们-None以指示应该删除它们。

所以要用Unicode字符串来完成上面的舞蹈,您可以调用translation_table = dict.fromkeys(map(ord, '!@#$'), None)

unicode_line = unicode_line.translate(translation_table)

这里^{}和^{}用于简洁地生成包含{ord('!'): None, ord('@'): None, ...}unicode_line = unicode_line.translate({ord(c): None for c in '!@#$'})

*为了与以前的Pythons兼容,可以创建一个“null”转换表来代替None:import string

line = line.translate(string.maketrans('', ''), '!@#$')

这里^{}用于创建一个翻译表,它只是一个包含序数值为0到255的字符的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值