Magazine

Esempio di Matching and Replacing attraverso Regex

Luca Del Tongo

14/03/2007

Il seguente articolo ha come obiettivo quello di mostrare un esempio di utilizzo delle Regex all' interno di un contesto reale.

0%100%
per esprimere un voto รจ necessario registrarsi al sito

 INTRODUZIONE 

Una Regular Expression (Regex) è una stringa/pattern che permette in modo compatto di rappresentare un insieme di stringhe, utilizzando precise regole sintattiche. Con le regex è possibile quindi cercare una determinata sequenza (pattern di rircerca) all'interno di un testo definendo una volta terminata la ricerca quali siano le azioni da eseguire su di essa. L' utilizzo delle regex  viene consigliato qualora si vogliano effettuare operazioni di  manipolazioni sulle stringhe; 

 

ESEMPIO DI APPLICAZIONE REALE

Supponiamo di avere a che fare con delle stringhe xpath del tipo:

  •  ns0:Letter[1]/ns0:Customer[1]/ns0:Work[1]/ns0:Activity[1]/ns0:SubActivity[2]/ns0:Name[1]
  •  Letter[1]/Customer[1]/Work[1]/Activity[1]/SubActivity[2]/Name[1]

Il percorso xpath della prima stringa prevede un namespace ("ns0:"), mentre nel secondo non abbiamo nessun namespace. Supponiamo che data una di queste due stringhe si voglia aggiornare la stringa in modo che tutti gli indici numerici contenuti dentro le parentesi quadre vengano sostituiti con un indice numerico predefinito. Analizziamo come ciò sia possibile definendo la seguente funzione che si basa sull'utilizzo delle regex : 

 

private string updateXPathAllExpression(string oldxpath, int index) { Regex regex = new Regex(@"/\w*:*\w*[[]*\d*[]]*"); Match match = regex.Match(oldxpath); string xpath = null; while (match.Success) { xpath += Regex.Replace(match.Value, @"[[]\d*[]]", "[" + index.ToString() + "]"); match = match.NextMatch(); } return xpath; }
 Il pattern della prima regex può essere letto nel seguente modo:

 

  1. Matcha come primo carattere il carattere "/" ;
  2. Successivamente matcha un carattere che sia una parola ("\w") per un numero di volte che va da a zero a infinito ("*");
  3. Successivamente matcha il carattere ":" per un numero di volte che va da a zero a infinito ("*");
  4. Successivamente come nel punto 2 matcha  un carattere che sia una parola ("\w") per un numero di volte che va da a zero a infinito ("*");
  5. Successivamente matcha il carattere "[": per un numero di volte che va da a zero a infinito ("[[]*");
  6. Successivamente matcha un numero ("\d") per un numero di volte cha va da zero ad infinito ("*");
  7. Concludi matchando il carattere "]": per un numero di volte che va da a zero a infinito ("[]]*");

Il pattern della seconda regex ha una struttura del tutto simile a quella della prima  .

La  funzione definita sopra riceve come parametri di ingresso la stringa da modificare e l'indice numerico da sostituire; sullla prima regex viene invocato il metodo Match utlizzato per effettuare i vari match all' interno della stringa  xpath in ingresso; ottenuti i vari match della prima regex successivamente si cicla fino a che ci sono match con esito positivo, andando a ricostruirsi parte della stringa xpath finale effettuando il replacement dell'indice tramite il metodo Replace invocato sul valore del match corrente; La concatenazione successiva delle varie parti della stringa xpath effettuata sui valori dei match della regex permette di ricostruire la stringa xpath modificata;

RISORSE

http://www.regular-expressions.info/

http://www.regexbuddy.com/

 

Ad maiora....

Commenti
Nome

Sito web
Commento


indietro