Регулярное выражение Python мгновенно заменяет группы

#python #regex #python-unicode

#python #Регулярное выражение #Регулярное выражение-группа

Вопрос:

Есть ли какой-либо способ напрямую заменить все группы, используя синтаксис регулярных выражений?

Обычный способ:

 re.match(r"(?:aaa)(_bbb)", string1).group(1)
  

Но я хочу добиться чего-то подобного:

 re.match(r"(d.*?)s(d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)")
  

Я хочу мгновенно создать новую строку из групп, которые только что были захвачены регулярным выражением.

Ответ №1:

Взгляните на re.sub :

 result = re.sub(r"(d.*?)s(d.*?)", r"1 2", string1)
  

Это функция подстановки (замены) регулярных выражений в Python. Строка замены может быть заполнена так называемыми обратными ссылками (обратная косая черта, номер группы), которые заменяются тем, что было сопоставлено с группами. Группы подсчитываются так же, как и с помощью group(...) функции, т.Е. Начиная с 1 , слева направо, открывая круглые скобки.

Комментарии:

1. Намного понятнее, чем в документе! Не понял, как группа работает с этим. Они должны добавить такой пример.

2. это сработало с первого раза, это довольно хороший понятный способ объяснить это. Спасибо, и можете ли вы объяснить, как подгруппа должна правильно вызывать (r(r))r((r)((r)r)) подобную ситуацию?

3. @RakshithaMurangaRodrigo Группы нумеруются слева направо, исходя из того, с чего они начинаются. Поэтому, если я вставлю номер каждой группы прямо перед группой, они будут отсортированы : 1(r2(r))r3(4(r)5(6(r)r)) .

4. Вы также можете указать имя для группы, используя это обозначение: (?P<group-name><pattern>) а затем ссылаться на них таким образом: g<group-name> . Это самый удобный способ, ИМХО.

5. @MarshallJobe ? after * не означает необязательный, но это делает * его бесполезным. Тем не менее, в этом случае это все еще не нужно (и, возможно, даже плохая идея), но я просто повторно использовал точное регулярное выражение из вопроса, поскольку основное внимание было уделено замене.

Ответ №2:

Принятый ответ идеален. Я бы добавил, что ссылка на группу, вероятно, лучше достигается с помощью этого синтаксиса:

 r"g<1> g<2>"
  

для строки замены. Таким образом, вы обходите синтаксические ограничения, когда за группой может следовать цифра. Опять же, все это присутствует в документе, ничего нового, просто иногда трудно заметить с первого взгляда.

Комментарии:

1. Если вы хотите добавить число после группы, это правильный путь, в противном случае это приведет к путанице числового значения с порядковым номером группы.