Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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: 2794
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: 2794
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: 2794
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: 2794
$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: 2794
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: 2794
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: 2794
\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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
AMD: l'alternativa al DLSS 5 sarebbe in ...
Canon EOS R8 Mark II: sensore da 24,2 MP...
Alla Napoli Shipping Week 2026 arriva il...
Addio bollo: il Governo cancella la tass...
Speciale Logitech G: mouse PRO X SUPERLI...
Cosa pensano Altman, Amodei, Benioff e H...
Microsoft: evento il 7 ottobre dedicato ...
Scoperti 84 corpi cosmici anomali: cosa ...
Dimensity 9600 Pro contro A20 Pro, il nu...
HillMiles MileCity1 torna a 648,99€: e-b...
Enel Mobile, il debutto è sempre ...
Nuova rimodulazione per il fisso di TIM ...
iPhone 18 Pro e Pro Max, preordini sotto...
Ha craccato 26 giochi: ora Denuvo vuole ...
Xiaomi 18 Pro, il lancio è uffici...
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: 21:16.


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