2024-10-03 11:25:08 发布
网友
有没有一种更紧凑、更有效的方法从给定的列表中去掉任何后缀的字符串,即:
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
后缀的长度不同
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。你知道吗
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|..)$的正则表达式。注意$锚点,它与行的末尾匹配。所以这只能在最后进行匹配。你知道吗
'|'.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, "")
我应该这么做。检查以确保后缀在字符串中,如果在,则将其删除。你知道吗
因为字符串比较只看字符串的末尾,所以效率略高。你知道吗
您可以使用
re.sub
。你知道吗'|'.join(sfxs)
帮助加入以|
作为分隔符的suffix
列表。所以r'(' + '|'.join(sfxs) + r')$'
会形成一个类似于(suff1|suff2|suff3|..)$
的正则表达式。注意$
锚点,它与行的末尾匹配。所以这只能在最后进行匹配。你知道吗我应该这么做。检查以确保后缀在字符串中,如果在,则将其删除。你知道吗
相关问题 更多 >
编程相关推荐