Применить dict к регулярному выражению

#python #regex

#python #регулярное выражение

Вопрос:

У меня есть строка, и мне нужно скрыть важные детали. Например,

 x='Dear Mr /Ms Shantanu your agr no 1234 is expired on 13/11/2020 with arrears. Pls pay the arrear amount at your nearest branch'
  

Вывод должен выглядеть примерно так…

 Dear Mr /Ms xxxx your agr no xxxx is expired on xx/xx/xxxx with arrears. Pls pay the arrear amount at your nearest branch
  

Я попробовал следующие 3 инструкции, и это работает так, как ожидалось.

 re.sub(r'agr no d ', 'agr no xxxx', x)
re.sub(r'expired on d /d /d ','expired on xx/xx/xxxx', x)
re.sub(r'Mr /Ms w ','Mr /Ms xxxx', x)
  

Но есть еще несколько шаблонов. У меня есть dict, который мне нужно применить к регулярному выражению.

 myreplace= {'agr no d ': 'agr no xxxx', 'expired on d /d /d ':'expired on xx/xx/xxxx', 'Mr /Ms w ':'Mr /Ms xxxx'}
  

Каков наилучший способ добиться этого?

Комментарии:

1. Я не получил OP!

2. Это может помочь: python.org/dev/peps/pep-0274

3. Простой for цикл?

Ответ №1:

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

Как насчет этого:

 import re

formatting = [[r'agr no d ', 'agr no xxxx'], [r'expired on d /d /d ', 'expired on xx/xx/xxxx'], [r'Mr /Ms w ', 'Mr /Ms xxxx']]

s = 'Dear Mr /Ms Shantanu your agr no 1234 is expired on 13/11/2020 with arrears. Pls pay the arrear amount at your nearest branch'

for regex,substitution in formatting:
    s = re.sub(regex, substitution, s)

print(s)
  

Результат соответствует ожидаемому.

formatting содержит несколько списков, например: [[регулярное выражение1, подстановка1], [регулярное выражение2, подстановка2], …]