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

2024-10-03 11:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种更紧凑、更有效的方法从给定的列表中去掉任何后缀的字符串,即:

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

后缀的长度不同


Tags: to方法字符串in列表forstringfind
3条回答
sfxs = ['suffix1', 'sfx2', 'suffix333']
s = 'string-to-process-sfx2'
for sfx in sfxs:
    if s.endswith(sfx):
        s = s[:-len(sfx)]
        break
print(s)

因为字符串比较只看字符串的末尾,所以效率略高。你知道吗

您可以使用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-'
sfxs = ['suffix1', 'sfx2', 'suffix333']
s = 'string-to-process-sfx2'
for sfx in sfxs:
    if sfx in s:
        s.replace(sfx, "")

我应该这么做。检查以确保后缀在字符串中,如果在,则将其删除。你知道吗

相关问题 更多 >