Regex.Python.Держите одну группу и заменяйте другие в строке - PullRequest
0 голосов
/ 27 февраля 2019

Вот код:

In [1]: import re

In [2]: p = 'zxc(.*?)!(.*?)zxc'

In [3]: s = 'zxc wololo ! ololo zxc'

In [4]: re.sub(pattern=p, repl=r"", string=s)
Out[4]: ''

In [5]: re.sub(pattern=p, repl=r"\1", string=s)
Out[5]: ' wololo '

Ожидается: zxc wololo !zxc

Вопрос:
Как получить эту строку zxc wololo !zxc?
Мне нужно сохранить 1-ую группу с «префиксом» и «суффиксом» шаблона.И давайте предположим, что существует более 2 групп.
Какое ключевое слово мне следует использовать в repl для достижения ожидаемого результата?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать регулярное выражение на основе поиска с нулевой шириной:

>>> s = 'zxc wololo ! ololo zxc'
>>> print re.sub(r'(?<=zxc)([^!]*!).*?(?=zxc)', r'\1', s)
zxc wololo !zxc

Здесь:

  • (?<=zxc) является утверждением с задним взглядом
  • (?=zxc) являетсяпредварительное утверждение
  • ([^!]*!) соответствует и захватывает подстроку до ! и после ! в группе # 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...