Vamos supor que eu tenha o seguinte regex:
-(\d+)-
e quero substituir, usando C #, o Grupo 1 (\d+)
por AA
, para obter:
-AA-
Agora estou substituindo-o usando:
var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-");
Mas eu realmente não gosto disso, porque se eu alterar o padrão para corresponder _(\d+)_
, também terei que alterar a string de substituição _AA_
, e isso é contrário ao princípio DRY.
Estou procurando algo como:
Mantenha o texto correspondente exatamente como está, mas altere o Grupo 1 por this text
e o Grupo 2 por another text
...
Edit:
Isso foi apenas um exemplo. Estou apenas procurando uma maneira genérica de fazer o que eu disse acima.
Deve funcionar para:
anything(\d+)more_text
e qualquer padrão que você possa imaginar.
Tudo o que quero fazer é substituir apenas grupos e manter o resto da partida.
:)
. Na minha opinião, essa solução é muito melhor e mais limpa do que usar lookahead e lookbehinds..Value
aom.Groups[1]
etc.(?:foo)(bar)
,$1
irá substituirbar
. mais detalhesVocê pode fazer isso usando lookahead e lookbehind :
fonte
Eu também precisava disso e criei o seguinte método de extensão:
Uso:
Resultado:
fonte
Se você não quiser alterar seu padrão, poderá usar as propriedades Índice e Comprimento do Grupo de um grupo correspondente.
fonte
Aqui está outra boa opção de limpeza que não requer alteração no seu padrão.
fonte
siga a codificação abaixo para obter a substituição do grupo separado.
fonte