Как использовать регулярное выражение python для замены с помощью захваченной группы?

Предположим, я хочу сменить the blue dog and blue cat wore blue hats the gray dog and gray cat wore blue hats .

С помощью sed я мог бы выполнить это следующим образом:

 $ echo 'the blue dog and blue cat wore blue hats' | sed 's/blue \(dog\|cat\)/gray \1/g' 

Как я могу сделать аналогичную замену в Python? Я пробовал:

 >>> s = "the blue dog and blue cat wore blue hats" >>> p = re.compile(r"blue (dog|cat)") >>> p.sub('gray \1',s) 'the gray \x01 and gray \x01 wore blue hats' 

4 Solutions collect form web for “Как использовать регулярное выражение python для замены с помощью захваченной группы?”

Вам нужно избегать обратной косой черты:

 p.sub('gray \\1', s) 

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

 p.sub(r'gray \1', s) 

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

 p = re.compile(r'blue (?P<animal>dog|cat)') p.sub(r'gray \g<animal>',s) 

Попробуй это:

 p.sub('gray \g<1>',s) 

Off, для нумерованных групп захвата:

 #/usr/bin/env python import re re.sub( pattern=r'(\d)(\w+)', repl='word: \\2, digit: \\1', string='1asdf' ) 

word: asdf, digit: 1

Python использует литеральную обратную косую черту, плюс один-на-индекс для нумерации записей группы захвата, как показано в этом примере. Итак, \1 , введенный как '\\1' , ссылается на первую группу захвата (\d) и \2 на вторую захваченную группу.

  • Как получить плоский XML, чтобы внешние объекты были объединены на верхний уровень
  • Удаление дубликатов PCR из файла Fastq, содержащего уникальные молекулярные идентификаторы
  • Разбор скобок с помощью sed с использованием регулярного выражения
  • Как случайным образом удалить несколько строк из большого файла?
  • Sed скрипт для редактирования файла csv или Python
  • Каковы различия между Perl, Python, AWK и sed?
  • Как извлечь комментарий из файла заголовка с помощью python, perl или sed?
  • разбиение файла на более мелкие файлы с использованием количества полей
  • Python - лучший язык программирования в мире.