#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. Если вы хотите добавить число после группы, это правильный путь, в противном случае это приведет к путанице числового значения с порядковым номером группы.