Вы можете попробовать это:
import re
lyst = ["KR 71D 6 94 SUR LC 1709","KR 24B 15 20 SUR AP 301","KR 72F 39 42 SUR","KR 72F SUR 39 42","KR 72 SUR 39 42"]
comp = re.compile(r'([a-zA-Z]+)(\s)(\w+)\s(\d+)\s(\d+)\s([a-zA-Z]+)(.*)$')
Logic
Используя логику захвата соответствия в круглых скобках, вы можете захватить все совпадения слов (включая числа и слова), разделенных пробелами, для совпадения SUR нам нужно, чтобы пятое слово было сопоставлено и вставлено в третью позицию. , Итак, мы фиксируем это в \ 6 (один больше 5, потому что мы также совпадаем с одним пробелом). После этого матча выберите все остальное в одиночном матче, используя (. *). Мы используем здесь sub
от повторного модуля. Для последних двух строк, поскольку шаблон никогда не проходит, следовательно, ничего не заменяется, и строка останется такой, как есть.
newlyst = []
for items in lyst:
newlyst.append(re.sub(comp, r'\1\2\3\2\6\2\4\2\5\7', items))
Вы можете напечатать newlyst
, чтобы увидеть вывод:
Выход:
['KR 71D SUR 6 94 LC 1709', 'KR 24B SUR 15 20 AP 301', 'KR 72F SUR 39 42', 'KR 72F SUR 39 42', 'KR 72 SUR 39 42']