问题
你想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。
解决方案
对于简单的文本替换,我们可以使用[lr]strip
和replace
strip()
方法能用于删除开始或结尾的字符。 lstrip()
和 rstrip()
分别从左和从右执行删除操作。 默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符集合。
>>> ' spacious '.lstrip()'spacious '>>> 'www.example.com'.lstrip('cmowz.')'example.com'>>> ' spacious '.rstrip()' spacious'>>> 'mississippi'.rstrip('ipz')'mississ'>>> ' spacious '.strip()'spacious'>>> 'www.example.com'.strip('cmowz.')'example'复制代码
如果需要替换或者删除中间的某些字符,可以使用replace
方法
>>> 'abc'.replace('b', '')'ac'复制代码
那么对于复杂的替换或者删除操作,比如需要一次替换多个字符,可以使用str.translate(table)
方法
这个方法需要传入的table
是一个实现了__getitem__()
方法的对象(例如dict),其中key必须是unicode编码,value是unicode编码或者字符或者None
mapping = { ord('1'): 'a', ord('2'): ord('b'), ord('3'): None,}str1 = '123'str2 = str1.translate(mapping)print(str2)复制代码
输出为ab
我们也可以使用str.maketrans()
来更简单的生成上述的table
,比如通过一个key和value都是字符的dict
生成一个上述的table
mapping = { '1': 'a', '2': ord('b'), '3': None,}str1 = '123'str2 = str1.translate(str.maketrans(mapping))print(str2)复制代码
输出为ab
也可以通过两个相同长度的字符串创建一个上述的table
mapping = str.maketrans('123', 'abc')str1 = 'ppp123yyy'str2 = str1.translate(mapping)print(str2)pppabcyyy复制代码
讨论
字符串替换和删除的方法有很多,一般来说为了追求效率,我们应该使用最简单的那个方法
比如需要替换或删除头部或者尾部的时候考虑strip
、lstrip
、rstrip
还需要替换或删除中间元素时候再考虑replace
如果遇到更复杂的替换删除操作,或者使用上述方法来做非常麻烦的时候,可以考虑translate
方法
当然,当涉及到一些模式的时候,可以使用考虑re
模块来处理字符串
来源
Stack Overflow
关注
欢迎关注我的微信公众号:python每日一练