Question: Is there a more compact and efficient way of stripping a string of any suffix from a given list, i.e.:

```
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

```

Suffixes are of different lengths

Answer: 
You may use `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)` helps to join the `suffix` list with `|` as delimiter. So `r'(' + '|'.join(sfxs) + r')$'` would form a regex like `(suff1|suff2|suff3|..)$`. Note that `$` anchor, which matches the end of the line. So this would do matching only at the end.

```
>>> 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, "")

```

Should do it. Check to ensure the suffix is in the string, then remove it if it is.