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每日一練

相關文章
相關標籤/搜索