подстановка с несколькими частями вместе с пробелами в python - PullRequest
0 голосов
/ 19 марта 2020

Ввод:

"good && toast&&guest &fast& slow||wind ||old|| new || very good"

Требование: заменить " && " на "and" (аналогично " || " на "or"), поэтому мой вывод для вышеупомянутого должен быть следующим:

"good and toast&&guest &fast& slow||wind ||old|| new or very good"

Что я пытался сделать:

import re

new_ = {
                                '&&':'and',
                                '||':'or'
}

inpStr = "good && toast&&guest &fast& slow||wind ||old|| new || very good"
replDictRe = re.compile( r'(\s%s\s)' % '\s|\s'.join(map(re.escape, new_.keys())))
oidDesStr = replDictRe.sub(lambda mo:new_.get(mo.group(),mo.group()), inpStr)
print(oidDesStr)

1 Ответ

0 голосов
/ 19 марта 2020

Вы можете использовать

replDictRe = re.compile( r'(?<!\S)(?:{})(?!\S)'.format('|'.join(map(re.escape, new_.keys()))) )

См. online Python demo и regex demo .

Шаблон (?<!\S)(?:\&\&|\|\|)(?!\S) означает

  • (?<!\S) - соответствует местоположению, которому непосредственно не предшествует непробельный символ (он же граница слева)
  • (?:\&\&|\|\|) - либо &&, либо || символьная подстрока
  • (?!\S) - местоположение, за которым сразу не следует непробельный символ (он же правая граница пробела).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...