问题
你想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。
解决方案
对于简单的文本替换,我们可以使用[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每日一练
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。