re.sub('a(b)','d','abc')
dc
, а не adc
. Так почему же re.sub
понять группу захвата здесь?Re.sub с группой захвата
ответ
Потому что он должен заменить все вхождения шаблона:
возвращает строку, полученная путем замены левых неперекрывающихся вхождений шаблона в строке с помощью замены замены.
Если бы заменить только некоторую подгруппу, то сложные регулярные выражения с несколькими группами не будут работать. Существует несколько возможных решений:
- Указать образец целиком:
re.sub('ab', 'ad', 'abc')
- мой любимый, так как он очень читабельен и ясен. - Захват группы, которые вы хотите сохранить и затем ссылаться на них в шаблоне (обратите внимание, что это должно быть сырым строка, чтобы избежать побега):
re.sub('(a)b', r'\1d', 'abc')
- Аналогично предыдущему варианту: обеспечивают функцию обратного вызова в качестве
repl
аргумента и заставить обработать объектMatch
и вернуть требуемый результат. - Используйте lookbehinds/lookaehs, которые не входят в игру, но влияют на соответствие:
re.sub('(?<=a)b', r'd', 'abxb')
даетadxb
.?<=
в начале группы говорит: «Это взгляд».
Просто быстрый совет: вы можете использовать '\ 1' ** в regex **:' re.match (r '([la] {2}) - \ 1', 'la-la') '. Это будет соответствовать тому, что группировать ссылку ('1' в этой обложке) ** соответствует ** (не шаблон), поэтому это регулярное выражение не будет соответствовать« la-al », например. – math2001
- 1. питон захвата группы с re.sub
- 2. Использование re.sub захвата группы
- 3. Использование группы захвата в re.sub
- 4. Группа обратного захвата, объединенная с группой прямого захвата
- 5. Замена названных групп захвата на re.sub
- 6. Замена Java Regex с группой захвата
- 7. URL переписывания Regex с группой захвата
- 8. Как ограничить ввод данных этой группой захвата?
- 9. Проблема с регулярным выражением с группой захвата PHP
- 10. Проанализируйте номер с помощью регулярного выражения с группой без захвата
- 11. Regex в соответствии с группой захвата один или несколько раз
- 12. .Net Regex заменить повторяющиеся вхождения шаблона с группой захвата
- 13. Сочетание двух шаблонов с именованной группой захвата в Python?
- 14. Что случилось с не группой захвата в моем регулярном выражении
- 15. python re.sub() с? P
- 16. re.sub с обратными ссылками
- 17. re.sub с японскими иероглифами
- 18. Путаница с re.sub
- 19. Рекурсия с re.sub()
- 20. Regex для захвата символа между группой, но игнорирование вложенной группы
- 21. Perl выполняет поиск и замену переменной и группой захвата
- 22. re.sub issue при использовании группы с \ number
- 23. Как выполнить поиск и заменить группой захвата в VBA
- 24. re.sub "(-)" failed
- 25. cakephp paginate с группой и группой
- 26. Интерактивная подстановка - re.sub() с pos?
- 27. Имея некоторые проблемы с re.sub
- 28. некорректный вывод с помощью re.sub()
- 29. re.sub заменить пробелы с запятой
- 30. питон re.sub с переменным текстом
Вы не используете его в замене, так что же вы ожидаете? Если вы хотите заменить «b», которому предшествует «a», вам нужно либо «re.sub (« ab »,« ad »,« abc ») или« re.sub ('(a) b », r '\ 1d', 'abc') ', где' '\ 1" 'относится к группе захвата. – DyZ
Спасибо! Ожидается, что группа захвата будет заменена по умолчанию. Правильный подход выглядит менее интуитивно понятным, но, вероятно, более гибким. – Nick