Oggi ho avuto la necessità di rimpiazzare il seguente testo che corrisponde alla visualizzazione di un byte array dalla Watch Window del debugger di Visual Studio:
[0] 210 byte
[1] 7 byte
[2] 0 byte
[3] 0 byte
[4] 6 byte
[5] 0 byte
[6] 0 byte
...
Nel seguente modo:
210, 7, 0, 0, 6, 0, 0, ...
In modo da poter creare agevolmente tramite codice c# un array di byte. Chiaramente il buffer è molto più lungo altrimenti avrei impiegato meno tempo a modificare il testo a mano. Armato di pazienza mi sono ripassato la sintassi delle Regular Expression in Visual Studio ed ho prodotto la seguente espressione per il Find:
^:b*\[:z\]:b*{:z}:b*byte\n
Analizziamo le singole parti della regular expression:
^ |
L'inizio di una riga di testo |
:b* |
Zero o più caratteri di spaziatura (nel formato standard delle regular expressione sarebbe \s*) |
\[ |
Il carattere [ (essendo un carattere speciale deve essere preceduto da \) |
:z |
Un numero intero |
\] |
Il carattere ] |
:b* |
Zero o più spazi |
{:z} |
Le parentesi graffe indicano una tag expression che potrà essere utilizzata nel replace (vedi dopo) |
:b* |
Zero o più spazi |
byte |
La parola byte |
\n |
Un line break |
Ora per il replace ho scritto:
\1,
Significa di rimpiazzare ciò che viene trovato dall'espressione regolare precedente con la tag expression 1 (quella tra parentesi graffe e cioè il numero intero) seguito da una virgola e da uno spazio (non si vede nel testo). Dopo aver premuto il pulsante Replace All Il risultato è il seguente:
210, 7, 0, 0, 6, 0, 0, ...
Semplice no?