|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Espressioni regolari per semplificare listato C++
Mi trovo a dover semplificare con Notepad++ un lungo listato in C contentente tantissime voci.
Faccio un esempio con una piccola parte: ,,, Buffer[parte_da_eliminare_1]=WordBlocco; Buffer[parte_da_eliminare_2]=WordBlocco; Buffer[parte_da_eliminare_3]=WordBlocco; Buffer[parte_da_eliminare_4]=WordBlocco; ,,, voglio ottenere: Buffer[]=WordBlocco; Buffer[]=WordBlocco; Buffer[]=WordBlocco; Buffer[]=WordBlocco; In pratica con Notepad++ quando faccio "sostituisci" ed abilito le "espressioni regolari", volevo sapere che sintassi utilizzare per eliminare i caratteri alfanumerici che ho nell'esempio di sopra. Mi scuso se vi faccio perdere tempo, ma ho cercato un po in rete, e per una stupidata di questo tipo non c'è un esempio immediato Grazie mille |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Prova così
Stringa da ricercare: Codice:
(\w+\[)(\w+)(\]=\w+;) Codice:
$1$3 |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Funziona alla grande grazie!
Mi puoi spiegare in breve la sintassi? Grazie mille |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Per studiare approfonditamente la sintassi ti consiglio questo tutorial:
http://www.regular-expressions.info/tutorial.html Nella regex che ho usato sono definiti 3 gruppi (delimitati dalle parentesi tonde). I gruppi qui servono per referenziarli nella sostituzione Codice:
(\w+\[) (\w+) (\]=\w+;) \[ significa il carattere '['. '\' è il carattere di escape e va usato quando vuoi fare il match di caratteri riservati \] idem '=' e ';' non sono caratteri riservati, effettuano il match di sé stessi Infine nella stringa di sostituzione $1 e $3 referenziano il primo e il terzo gruppo |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Grazie mille
Che gentile!
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Ho un altro caso, come mi comporto se:
ho: Case 0x0001: Buffer[parte_da_eliminare_1]=WordBlocco; Array[rimane1]=WordBlocco; break; case 0x0002: Buffer[parte_da_eliminare_2]=WordBlocco; Array[rimane2]=WordBlocco; break; case 0x0003: Buffer[parte_da_eliminare_3]=WordBlocco; Array[rimane3]=WordBlocco; break; case 0x0004: Buffer[parte_da_eliminare_4]=WordBlocco; Array[rimane4]=WordBlocco; break; ,,, voglio ottenere: Case 0x0001: Buffer[]=WordBlocco; Array[rimane1]=WordBlocco; break; case 0x0002: Buffer[]=WordBlocco; Array[rimane2]=WordBlocco; break; case 0x0003: Buffer[]=WordBlocco; Array[rimane3]=WordBlocco; break; case 0x0004: Buffer[]=WordBlocco; Array[rimane4]=WordBlocco; break; Rigrazie mille Ultima modifica di legolas977 : 01-03-2013 alle 22:01. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Direi
Codice:
(Buffer\[)(\w+)(\]=\w+;) |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Perfetto, dai faccio un pò di prove! Graziusss!
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Se volessi inserire la stringa "Stato" dentro alle quadre, come modifico "$1$3" ?
Per dire, inserire: Case 0x0001: Buffer[Stato]=WordBlocco; Array[rimane1]=WordBlocco; break; case 0x0002: Buffer[Stato]=WordBlocco; Array[rimane2]=WordBlocco; break; case 0x0003: Buffer[Stato]=WordBlocco; Array[rimane3]=WordBlocco; break; case 0x0004: Buffer[Stato]=WordBlocco; Array[rimane4]=WordBlocco; break; |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
$1Stato$3
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
ops mi sono spiegato male,
intendevo partendo da questa situazione: Case 0x0001: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; case 0x0002: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; case 0x0003: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; case 0x0004: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; riempire con Stato le quadre vuote. Ho visto che funziona cosi: (Buffer\[) () (\]=\w+ e $1Stato$3 Però non mi spiego le parentesi con dentro niente |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Sì, quelle parentesi le puoi togliere, però nella stringa di sostituzione dovrai usare $2 al posto di $3.
In verità quelle parentesi si potevano togliere sin dall'inizio ma mi sembrava più chiaro così... |
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Mi è sorto un altro dubbio mentre eseguivo i miei confronti, è anche possibile con le espressioni regolari eliminare le righe vuote?
ovvero da cosi: Case 0x0001: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; case 0x0002: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; a così: Case 0x0001: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; case 0x0002: Buffer[]=WordBlocco; Array[Stato]=WordBlocco; break; Ririgrazie |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Mi sembra che la ricerca con regex di notepad++ non supporti la ricerca su più linee, nel senso che fa il match solo su una riga per volta...
Se però le righe sono proprio vuote puoi usare la modalità di ricerca estesa (quella con \n, \r, \t, ecc...) e sostituire \r\n\r\n con \r\n |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Come cambia da \r\n\r\n a \r\n ?
nel senso che devo cercare \r\n\r\n e sostituire con \r\n ? |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
wow funziona anche questo, che spettacolo! volevo capire il perchè funziona :-)
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
\r è il carattere di carriage return, \n è il carattere di line feed. Puoi trovare altre info cercandoli con questi nomi.
Su windows quando vai a capo vengono inseriti questi due caratteri in sequenza. Cercando \r\n\r\n trovi le righe vuote perché per ognuna di esse la riga precedente termina con \r\n, mentre la riga corrente è composta solo da \r\n. Ovviamente questo procedimento funziona solo se le righe vuote sono davvero vuote, cioè senza spazi o tabulazioni. Se eri su linux invece avresti dovuto sostituire \n\n con \n |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Tutto chiaro.
Felicissima serata. Grazie |
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Jul 2007
Messaggi: 58
|
Eliminare riga
Ho un altro dubbio con le espressioni regolari.
Non riesco a trovare un modo per poter eliminare una riga senza lasciarla vuota. Esempio: Dato il seguente listato : 100001 200001 100002 100003 100004 100005 100006 200001 100007 Devo ottenere: 100001 100002 100003 100004 100005 100006 100007 In pratica devo eliminare 200001 compresa la sua riga. Potete aiutarmi? Grazie mille!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:45.



















