Я хочу добавить |
перед каждым тегом. Пожалуйста , проверьте ниже код , который я использовал.
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
Матч буквально|
Или^(?!\|)
Утверждайте начало строки , когда непосредственно не сопровождаемым ,|
чтобы избежать запуска с двойным ,||
если уже есть один присутствует
В замене использовать матч предваряется трубы
|\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