Ваши шаблоны содержат (.)
, который соответствует и захватывает любой отдельный символ, кроме символа разрыва строки. Вам нужно сопоставить любые символы, кроме :
, поэтому вам нужно использовать [^:]+
.
Вам не нужно компилировать отдельные объекты регулярных выражений, если изменяется только часть вашего регулярного выражения. Вы можете создавать свои регулярные выражения динамически и компилировать один раз перед чтением файла. Например, у вас есть значения 122
, 194
и 945
для использования в шаблоне :...:[^:]+:
вместо ...
, тогда вы можете использовать
vals = ["122", "194", "945"]
r = re.compile(r':(?:{}):[^:]+:'.format("|".join(vals)))
# Or, using f-strings
# r = re.compile(rf':(?:{"|".join(vals)}):[^:]+:')
Регулярное выражение будет выглядеть следующим образом :(?:122|194|945):[^:]+:
:
:
- двоеточие (?:122|194|945)
- группа без захвата соответствие 122
, 194
или 945
:
- двоеточие [^:]+
- 1+ символов, отличных от :
:
- двоеточие
Затем используйте
with open (sys.argv[1], 'r') as f:
for line in f:
print(r.sub('', line))