Regex: corresponde a um padrão, altera uma parte dele


1

Se você possui um arquivo de texto e deseja pesquisar e substituir uma parte de um padrão correspondente, como faria com perl one-liners, sed ou python?

Por exemplo:

"653433,78"

combinar com [0-9]{6},[0-9]{2}.

Mude ,para ..

Respostas:


5

Você pode usar subgrupos numerados. ou seja:

Encontrar:

([0-9]{6}),([0-9]{2})

Substituir:

\1.\2


Exemplo em Python:

import re
inp = '653433,78'
out = re.sub(r'([0-9]{6}),([0-9]{2})', r'\1.\2', inp)
print out

Isso lhe daria:

>>>'653433.78'

Para usar variáveis ​​numéricas em cadeias de substituição, a sintaxe de referência nomeada pode ser usada:re.sub(pat, r'\g<1>' + f'{my_number}', str)
aksh1618

2

Você pode capturar a peça correspondente ao redor do padrão que deseja substituir e, em seguida, reutilizá-la na instrução de substituição.

cat yourfile | perl -p -e "s/([0-9]{6}),([0-9]{2})/\\1.\\2/g"

Uma solução mais complexa com lookahead e lookbacks também pode ser usada (mas isso não suporta curingas como * e + para o seu padrão)

cat yourfile | perl -p -e "s/(?<=[0-9]{6}),(?=[0-9]{2})/./g"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.