У меня есть такая схема слов:
*_you_don't_* think_you_don't_* you_don't_*_* you_don't_know_your_youth
Я хочу заменить слово «ты» на «мы» только тогда, когда это слово, а не часть слова.
Я пытался использовать функцию границы слов, но это работает только тогда, когда текст разделен на слова, и в моем случае шаблон формируется с использованием подчеркивания, звездочки и т. д.
import re
s = "*_you_don't_* think_you_don't_* you_don't_*_* you_don't_know_your_youth"
re.sub(r'\you\b', 'we', s)
В приведенном выше примере я хочу, чтобы слово выглядело так:
*_we_don't_* think_we_don't_* we_don't_*_* we_don't_know_your_youth
и с кодом я написал, что не могу добиться такого результата.
_you_ на _we_?
Граница слов \b здесь не работает, потому что между буквой и подчеркиванием нет границ слов.






С .replace() :
s = "_you_don't_ think_you_don't_* you_don't__ you_don't_know_your_youth"
string.replace('_you_', '_we_').replace(' you_', ' we_')
Выход
"_we_don't_ think_we_don't_* we_don't__ we_don't_know_your_youth"
Попробуйте регулярное выражение: (?<=\b|_)you(?=\b|_)
[a-zA-Z] - Matches anything that is a single character
![a-zA-Z] - Anything that is not a single English character
? - One or zero match of pattern
(?<![a-zA-Z])you(?![a-zA-Z]) - This matches "you" if not preceded and
not followed by a letter
код:
import re
s = "*_you_don't_* think_you_don't_* you_don't_*_* you_don't_know_your_youth"
print re.sub(r'(?<![a-zA-Z])you(?![a-z-Z])', 'we', s)
Выход:
*_we_don't_* think_we_don't_* we_don't_*_* we_don't_know_your_youth
Поскольку вы знаете, чего хотите, используйте для граничных условий то, что вам не нужно.
(?<![^\W_])you(?![^\W_])
Самый простой способ, который я могу придумать, это использовать re.sub с группами обратных ссылок. Вы можете использовать следующее для достижения своей задачи.
re.sub(r'([_|\s])(?:you)(_)', r"\1we\2", s)
Здесь это первая группа в ([_|\s]), а вторая группа в (_). (?:you) — группа без захвата. В заменяющей строке \1 и \2 относятся к вышеупомянутым группам. Таким образом, в конечном итоге ваша строка замены становится <whatever character before you>we<whatever character after you>
s.replace(' you ', ' we ')? (и, очевидно, если не слово находится в начале или в конце предложения).