python字符串删除字符_从Python中的字符串中删除特定字符

Python中的字符串是不可变的(不能更改)。因此,效果line.replace(...)只是创建一个新字符串,而不是更改旧字符串。您需要重新绑定(赋值)它以line使该变量获取新值,并删除这些字符。

而且,你这样做的方式相对较慢。对于经验丰富的pythonator来说,这也有点令人困惑,他们会看到一个双重嵌套的结构,并想一想更复杂的事情正在发生。

从Python 2.6和更新的Python 2.x版本*开始,您可以使用str.translate,(但请继续阅读Python 3的差异):line = line.translate(None, '!@#$')

或正则表达式替换 re.subimport re

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

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

在Python 3中,字符串是Unicode。你将不得不翻译一点点。kevpie 在其中一个答案的评论中提及这一点,并在文档中str.translate注明。

调用translateUnicode字符串的方法时,不能传递我们上面使用的第二个参数。您也不能None作为第一个参数传递,甚至不能传递string.maketrans。而是将字典作为唯一参数传递。这个字典将字符的序数值(即调用ord它们的结果)映射到应该替换它们的字符的序数值,或者对我们有用None- 表示它们应该被删除。

所以要用Unicode字符串做上面的舞蹈,你会称之为translation_table = dict.fromkeys(map(ord, '!@#$'), None)

unicode_line = unicode_line.translate(translation_table)

这里dict.fromkeys和map习惯于简洁地生成包含的字典{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('', ''), '!@#$')

这里string.maketrans用于创建转换表,它只是一个包含序号值为0到255的字符的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值