Ваша проблема - дублирование между 'CREF'
, 'BREF'
, 'RREF'
и 'REF'
- поскольку 'REF'
входит во все остальные три, вы получите дублирующиеся замены, если вы исправите свой код к этому :
tags = ['XYZ', 'CREF', 'BREF', 'RREF', 'REF']
string_data = 'XYZ:MUMBAI UNIVERSITYCREF:PUNE UNIVERSITYBREF:DADAR UNIVERSITYRREF:KOLHAPUR UNIVERCITY LLCREF:SOLAPUR UNIVERSITY'
for each_tag in tags:
string_data= string_data.replace(each_tag, "|" + each_tag)
print(string_data)
Вам необходимо убедиться, что вы заменили 'REF'
только в том случае, если перед ним не стоит 'C'
, 'B'
или 'R'
.
Обратите внимание, что это может вызвать проблемы в некоторых случаях, таких как XYZ:CARE BEARREF
. Т.е. вы можете ожидать |XYZ:CARE BEAR|REF
, но вы получите |XYZ:CARE BEA|RREF
. Если вы хотите избежать этого, вам нужно быть более точным в отношении фактических правил.
Это работает, если вы знаете, что такого типа проблемы не возникнет:
import re
string_data = 'XYZ:MUMBAI UNIVERSITYCREF:PUNE UNIVERSITYBREF:DADAR UNIVERSITYRREF:KOLHAPUR UNIVERCITY LLCREF:SOLAPUR UNIVERSITY'
result = re.sub("(XYZ|CREF|BREF|RREF|REF)", r"|\1", string_data )
print(result)
Это позволяет избежать Speci c проверяет, поскольку регулярное выражение учитывает порядок и не будет соответствовать REF после того, как текст уже был найден как часть предыдущих значений.