Вы можете попробовать выполнить поиск и замену в режиме регулярных выражений:
Find: ^([^(]+)(.*?;)(CAT.*)$
Replace: $1$2$1;$3
Идея состоит в том, чтобы просто разделить каждую строку на части, которые нам нужны, чтобы связать воедино замену. В этом случае первая группа захвата - это слово, которое мы планируем вставить после первой точки с запятой, перед CAT
.
Демо
Только что заметил, что вы используете Python. Мы можем попробовать:
inp = """aarhus(iof>city>thing,equ>arhus);CAT(CATN),N(NP) ;
abadan(iof>city>thing);CAT(CATN),N(NP) ;
abandon(icl>leave>do,agt>person,obj>person);CAT(CATV),AUX(AVOIR),VAL1(GN) ;"""
output = re.sub(r'([^(]+)(.*?;)(CAT.*?;)\s*', '\\1\\2\\1;\\3\n', inp)
print(output)
Это печатает:
aarhus(iof>city>thing,equ>arhus);aarhus;CAT(CATN),N(NP) ;
abadan(iof>city>thing);abadan;CAT(CATN),N(NP) ;
abandon(icl>leave>do,agt>person,obj>person);abandon;CAT(CATV),AUX(AVOIR),VAL1(GN) ;