Python:什么是从列表中删除后缀字符串的更紧凑/有效的方法?

时间:2015-08-03 16:37:01

标签: python string strip

是否有更紧凑和有效的方法从给定列表中删除任何后缀的字符串,即:

sfxs = ['suffix1', 'sfx2', 'suffix333']
s = 'string-to-process-sfx2'
for sfx in sfxs:
    i = s.find(sfx)
    if not i == -1:
        s = s[:i]
        break

后缀长度不同

3 个答案:

答案 0 :(得分:3)

您可以使用re.sub

>>> import re
>>> sfxs = ['suffix1', 'sfx2', 'suffix333']
>>> s = 'string-to-process-sfx2'
>>> re.sub(r'(' + '|'.join(sfxs) + r')$', '',s)
'string-to-process-'
>>> re.sub(r'\b(' + '|'.join(sfxs) + r')$', '',s)
'string-to-process-'

>>> re.sub(r'-(' + '|'.join(sfxs) + r')$', '',s)
'string-to-process'

'|'.join(sfxs)有助于将suffix列表与|作为分隔符加入。因此r'(' + '|'.join(sfxs) + r')$'会形成像(suff1|suff2|suff3|..)$这样的正则表达式。请注意$锚点,它与行尾相匹配。所以这只会在最后进行匹配。

>>> re.sub(r'(' + '|'.join(sorted(sfxs, key=lambda x:len(x), reverse=True)) + r')$', '',s)
'string-to-process-'

答案 1 :(得分:1)

sfxs = ['suffix1', 'sfx2', 'suffix333']
s = 'string-to-process-sfx2'
for sfx in sfxs:
    if s.endswith(sfx):
        s = s[:-len(sfx)]
        break
print(s)

稍微提高效率,因为字符串比较仅查看字符串的结尾。

答案 2 :(得分:0)

sfxs = ['suffix1', 'sfx2', 'suffix333']
s = 'string-to-process-sfx2'
for sfx in sfxs:
    if sfx in s:
        s.replace(sfx, "")

应该这样做。检查以确保后缀在字符串中,如果是,则将其删除。