Python每日一练0016

问题

你想去掉文本字符串开头,结尾或者中间不想要的字符,好比空白。python

解决方案

对于简单的文本替换,咱们可使用[lr]stripreplace微信

strip() 方法能用于删除开始或结尾的字符。 lstrip()rstrip() 分别从左和从右执行删除操做。 默认状况下,这些方法会去除空白字符,可是你也能够指定其余字符集合。app

>>> '   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)方法spa

这个方法须要传入的table是一个实现了__getitem__()方法的对象(例如dict),其中key必须是unicode编码,value是unicode编码或者字符或者Nonecode

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生成一个上述的tableip

mapping = {
    '1': 'a',
    '2': ord('b'),
    '3': None,
}
str1 = '123'
str2 = str1.translate(str.maketrans(mapping))
print(str2)

输出为abci

也能够经过两个相同长度的字符串建立一个上述的tableunicode

mapping = str.maketrans('123', 'abc')
str1 = 'ppp123yyy'
str2 = str1.translate(mapping)
print(str2)
pppabcyyy

讨论

字符串替换和删除的方法有不少,通常来讲为了追求效率,咱们应该使用最简单的那个方法

好比须要替换或删除头部或者尾部的时候考虑striplstriprstrip

还须要替换或删除中间元素时候再考虑replace

若是遇到更复杂的替换删除操做,或者使用上述方法来作很是麻烦的时候,能够考虑translate方法

固然,当涉及到一些模式的时候,可使用考虑re模块来处理字符串

来源

Stack Overflow

关注

欢迎关注个人微信公众号:python每日一练

相关文章
相关标签/搜索