регулярное выражение заменить группу (java, python, perl, awk)

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

string = "xxxab yyyyab zzzab xxab"

Я хочу вызвать что-то вроде:

replace_all_group(string, /xx(ab)/,"AB")

и получить:

string = "xxxAB yyyyab zzzab xxAB"

любое «короткое» решение на java, perl, python и awk приветствуется! до сих пор мне удавалось добиться этого, используя index_of и тому подобное, но я надеюсь, что где-то там есть какой-то однострочный :)


person user422190    schedule 11.03.2011    source источник


Ответы (2)


Вам нужно положительное ретроспективное утверждение.

Сопоставьте и замените ab только если ему предшествует xx.

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

(?<=xx)ab

Рабочий пример на Perl

Рабочий пример на Java

person codaddict    schedule 11.03.2011
comment
Я вижу, это именно то, что я искал. Я собирался изучить эти обходные пути, но не знал, что он на самом деле делает. большое спасибо! - person user422190; 11.03.2011
comment
@codaddict, можете ли вы опубликовать фактический пример кода? Эти ссылки кажутся неработающими. - person avgvstvs; 29.10.2014

Если строка не усложнится:

>>> re.sub("xxab", "xxAB", "xxxab yyyyab zzzab xxab")
'xxxAB yyyyab zzzab xxAB'

Или версия ответа @codaddict на python:

>>> re.sub("(?<=xx)ab", "AB", "xxxab yyyyab zzzab xxab")
'xxxAB yyyyab zzzab xxAB'
person miku    schedule 11.03.2011