Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-03-2013, 19:04   #1
legolas977
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
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 19:46   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Prova così
Stringa da ricercare:
Codice:
(\w+\[)(\w+)(\]=\w+;)
Sostituisci con:
Codice:
$1$3
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 20:18   #3
legolas977
Member
 
Iscritto dal: Jul 2007
Messaggi: 58
Funziona alla grande grazie!
Mi puoi spiegare in breve la sintassi?
Grazie mille
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 20:58   #4
wingman87
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+;)
\w+ significa un qualunque carattere A..Z o a..z o 0..9 o underscore ripetuto da 1 a n volte
\[ 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
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 21:26   #5
legolas977
Member
 
Iscritto dal: Jul 2007
Messaggi: 58
Grazie mille
Che gentile!
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 21:51   #6
legolas977
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.
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 22:04   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Direi
Codice:
(Buffer\[)(\w+)(\]=\w+;)
E la stringa di sostituzione di prima
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 22:12   #8
legolas977
Member
 
Iscritto dal: Jul 2007
Messaggi: 58
Perfetto, dai faccio un pò di prove! Graziusss!
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 07:12   #9
legolas977
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;

legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 10:37   #10
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
$1Stato$3
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 11:42   #11
legolas977
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
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 11:49   #12
wingman87
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ì...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 16:35   #13
legolas977
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
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2013, 00:03   #14
wingman87
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
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2013, 00:13   #15
legolas977
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 ?
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2013, 00:15   #16
legolas977
Member
 
Iscritto dal: Jul 2007
Messaggi: 58
wow funziona anche questo, che spettacolo! volevo capire il perchè funziona :-)
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2013, 15:46   #17
wingman87
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
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2013, 20:14   #18
legolas977
Member
 
Iscritto dal: Jul 2007
Messaggi: 58
Tutto chiaro.
Felicissima serata.
Grazie
legolas977 è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2013, 18:10   #19
legolas977
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!!!
legolas977 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
Le fotografie dell'eclissi solare e dell...
Oracle AI Database si potenzia con nuove...
Russia offline: blackout internet mobile...
Gemini, Google investe 30 milioni per la...
Roborock Qrevo Edge S5A: 17.000 Pa, acqu...
Resa pubblica la foto della ''Terra che ...
Il robot che ha piegato 200 scatole di f...
SteelSeries Aerox 3 Wireless Gen 2: nuov...
"Quasi sociopatico": Sam Altma...
Star Wars Eclipse in difficoltà: ...
Gestione del team e romance organiche: l...
Intel lancia Core Ultra X9 378H: hardwar...
Tomodachi Life non supporterà Handheld M...
Identificati i boss di REvil e GandCrab:...
Google Chrome 148 introduce il caricamen...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v