Regex: combina um padrão, altera uma parte dele

0

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

Por exemplo:

"653433,78"

corresponde a [0-9]{6},[0-9]{2} .

Altere , para . .

    
por Quora Feans 11.12.2013 / 18:17

2 respostas

3

Você pode usar subgrupos numerados. ou seja:

Encontrar:

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

Substituir:

.


Exemplo em Python:

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

Isso lhe daria:

>>>'653433.78'
    
por 11.12.2013 / 18:29
2

Você pode capturar a parte correspondente em torno 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 suportará curingas como * e + para seu padrão)

cat yourfile | perl -p -e "s/(?<=[0-9]{6}),(?=[0-9]{2})/./g"
    
por 11.12.2013 / 18:24

Tags