как заменить символы с помощью regex.sub в Python - PullRequest
0 голосов
/ 29 января 2019

У меня есть строка s, где:

s = 'id=,value=<<<,RMOrigin=[0]>>>BasicData:id=ABCvalue=<<<ABCRMGrade=[0]>>>BasicData:id=ABCvalue='

Я хочу заменить ABC на DEF, когда произойдет

<<<ABC\w+=\[0]>>> 

, тогда результат должен быть

<<<DEF\w+=\[0]>>>

в тексте \ w + относится к RMGrade, но это меняется случайным образом

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

S = id=,value=<<<,RMOrigin=[0]>>>BasicData:id=ABCvalue=<<<ABCRMGrade=[0]>>>BasicData:id=ABCvalue=

я пробовал в виде:

 s = re.sub('<<<ABC\w+=\[0]>>>','<<<DEF\w+=\[0]>>>',s)

я вывел как

 'id=,value=<<<,RMOrigin=[0]>>>BasicData:id=ABCvalue=<<<DEF\\w+=\\[0]>>>BasicData:id=ABCvalue='

1 Ответ

0 голосов
/ 29 января 2019

Я немного сбит с толку, чего именно вы хотите достичь.Но если вы хотите заменить ABC в каждом совпадении с шаблоном <<<ABC\w+=\[0]>>>, вы можете использовать обратные ссылки на группы.

Например, измените шаблон, чтобы можно было ссылаться на группы (<<<)ABC(\w+=\[0]>>>).Теперь группа # 1 относится к детали до ABC, а группа # 2 относится к детали после ABC.Таким образом, строка замены выглядит следующим образом - \1DEF\2 - где \1 - группа № 1, а \2 - группа № 2.

import re

s = 'id=,value=<<<,RMOrigin=[0]>>>BasicData:id=ABCvalue=<<<ABCRMGrade=[0]>>>BasicData:id=ABCvalue='

res = re.sub(r'(<<<)ABC(\w+=\[0]>>>)', r'\1DEF\2', s)
print(res)

Выходные данные: id=,value=<<<,RMOrigin=[0]>>>BasicData:id=ABCvalue=<<<DEFRMGrade=[0]>>>BasicData:id=ABCvalue=

Вы также можете использовать функцию для определения замены.За дополнительной информацией обращайтесь в документацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...