Вы используете replace
неправильно, потому что вы ищете строковый литерал «% d».Это не RegEx.
Вы можете исправить свой код следующим образом:
import re
words = ['Duration12:14254', 'Noun', 'Adjective7:888']
result = [re.sub(r'[0-9]+', r'[\g<0>]', w) for w in words]
repResult = [re.sub(r':\[(\d+)\]', r':\1', w) for w in result]
print(repResult)
Вы получите:
['Duration[12]:1', 'Noun', 'Adjective[7]:8']
С ['Duration12:14254', 'Noun', 'Adjective7:888']
вы получите:
['Duration[12]:14254', 'Noun', 'Adjective[7]:888']
Этот код можно упростить, используя один RegEx:
import re
words = ['Duration12:14254', 'Noun', 'Adjective7:888']
result = [re.sub(r'(\d+):(\d+)', r'[\1]:\2', w) for w in words]