Как добавить строку до и после каждого регулярного выражения совпадают группы в Python? - PullRequest
2 голосов
/ 01 мая 2019

У меня есть строка и регулярное выражение с несколькими группами. Я хочу добавить строку до и после каждой подходящей группы. Как мне это сделать? Ниже приведен демонстрационный код, который используется только для описания моего вопроса.

data = "aa11bb123cc3333dd12eeeff3"
regex = re.compile(r"([a-z])\1(\d)(\d)(?=[a-z])")

Ожидаемый результат (использование < и > для окружения совпадающих групп):

<a>a<1><1>bb123cc3333<d>d<1><2>eeeff3

Пожалуйста, рассмотрите также группу регулярных выражений, например (\d)*, и я не знаю, сколько групп заранее.

1 Ответ

1 голос
/ 01 мая 2019

Вы можете использовать свое текущее регулярное выражение ([a-z])\1(\d)(\d)(?=[a-z]) и заменить его следующим:

<\1>\1<\2><\3>

Regex Demo

Вы можете изменитьваш код для использования re.sub и получения ожидаемого результата.

import re

data = "aa11bb123cc3333dd12eeeff3"
regex = re.compile(r"([a-z])\1(\d)(\d)(?=[a-z])")
print(re.sub(regex, r'<\1>\1<\2><\3>', data))

Печать так, как вы ожидали,

<a>a<1><1>bb123cc3333<d>d<1><2>eeeff3

Кроме того, когда вы обновили свой пост, просто уточнив, что это регулярное выражение (\d)* имеет только одну группу, и это не значит, что * вне группы, и это сделает число групп кратным.(\d)* будет вести себя так же, как \d*, за исключением того, что захваченная цифра в группе будет только одна и точно последняя найденная цифра.

...