Ошибка в теге разделенных `|` с помощью Regex питона

Акшай Godase:

Я хочу добавить |перед каждым тегом. Пожалуйста , проверьте ниже код , который я использовал.

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:
    result = string_data.replace(each_tag, "|" + each_tag)
    print(result)

Как я могу сделать это с помощью Regex?

Строка ввода:

XYZ:MUMBAI UNIVERSITYCREF:PUNE UNIVERSITYBREF:DADAR UNIVERSITYRREF:KOLHAPUR UNIVERCITY LLCREF:SOLAPUR UNIVERSITY

Фактический результат (неправильно):

XYZ:MUMBAI UNIVERSITYC|REF:PUNE UNIVERSITYB|REF:DADAR UNIVERSITYR|REF:KOLHAPUR UNIVERCITY LLC|REF:SOLAPUR UNIVERSITY

Ожидаемый результат:

|XYZ:MUMBAI UNIVERSITY|CREF:PUNE UNIVERSITY|BREF:DADAR UNIVERSITY|RREF:KOLHAPUR UNIVERCITY LLC|REF:SOLAPUR UNIVERSITY

Есть ли способ сделать это с помощью регулярных выражений?

Четвертая птица:

Вы могли бы соответствовать дополнительным Bили Rили спичке , Cкогда не предшествуют с Lпомощью отрицательного просмотра назад.

(?:[BR]?|(?<!L)C)REF|^(?!\|)

объяснение

  • (?: Non группа захвата
    • [BR]?Матч опциональный BилиR
    • | Или
    • (?<!L)CСовпадение Cи утверждают , что непосредственно в левом неL
  • ) Закрыть группа
  • REF Матч буквально
  • | Или
  • ^(?!\|)Утверждайте начало строки , когда непосредственно не сопровождаемым , |чтобы избежать запуска с двойным , ||если уже есть один присутствует

Regex демо | Python демо

В замене использовать матч предваряется трубы

|\g<0>

Например

import re

regex = r"(?:[BR]?|(?<!L)C)REF|^(?!\|)"
test_str = "XYZ:MUMBAI UNIVERSITYCREF:PUNE UNIVERSITYBREF:DADAR UNIVERSITYRREF:KOLHAPUR UNIVERCITY LLCREF:SOLAPUR UNIVERSITY"
subst = "|\\g<0>"
result = re.sub(regex, subst, test_str)

print (result)

Выход

|XYZ:MUMBAI UNIVERSITY|CREF:PUNE UNIVERSITY|BREF:DADAR UNIVERSITY|RREF:KOLHAPUR UNIVERCITY LLC|REF:SOLAPUR UNIVERSITY

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=4545&siteId=1