Вы можете использовать
re.sub(r'\bp\B', '2', s, flags=re.I)
См. Демонстрационную версию regex .
Если вам нужно убедиться, что после буква 1010 * использовать
re.sub(r'\bp(?=[^\W\d_])', '2', s, flags=re.I)
См. еще одно демонстрационное выражение .
Подробности
\b
- aграница слова p
- p
или P
(из-за re.I
) \B
- граница не из слов (следующий символ должен быть словом char) (?=[^\W\d_])
- позитивный прогноз, который требует, чтобы любая буква появлялась сразу справа от текущего местоположения.
Python demo :
import re
s = "python is programming language p"
print(re.sub(r'\bp(?=[^\W\d_])', '2', s, flags=re.I))
# => 2ython is 2rogramming language p
print(re.sub(r'\bp\B', '2', s, flags=re.I))
# => 2ython is 2rogramming language p