Regex: corrisponde a un modello, ne modifica una parte


0

Se hai un file di testo e vuoi cercare e sostituire una parte di un pattern abbinato, come lo faresti con perl one-liner, sed o python?

Per esempio:

"653433,78"

abbinare con [0-9]{6},[0-9]{2}.

Modificare , a ..

Risposte:


4

È possibile utilizzare sottogruppi numerati. vale a dire:

Trova:

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

Sostituire:

\1.\2


Esempio in Python:

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

Questo ti darebbe:

>>>'653433.78'

2

È possibile acquisire la parte corrispondente attorno al modello che si desidera sostituire e quindi riutilizzarla nell'istruzione replace.

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

È anche possibile utilizzare una soluzione più complessa con lookahead e lookback (ma ciò non supporterà i caratteri jolly come * e + per il modello)

cat yourfile | perl -p -e "s/(?<=[0-9]{6}),(?=[0-9]{2})/./g"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.