Blocco note ++ / Espressione regolare per trovare una riga con lo stesso inizio, diversa fine


1

Quindi, ho letto un po 'e ho scoperto che NotePad ++ non usa regex "normale" (iniziando a pensare che tornerò su SciTE), ma ecco la mia domanda:

Ho un elenco esportato di dati con alcuni dati ridondanti che sto cercando di ripulire e convertire in un buon CSV per l'importazione in rubriche (migrazione di una soluzione server fax, quella precedente è OOOOLD e quindi questa è la migliore Posso ottenere per l'esportazione).

La riga che sto cercando di rimuovere da ciascun gruppo di voci inizia sempre

Voce: NAME ~

E poi c'è un codice alfanumerico di 12 cifre (che sembra essere esadecimale) che segue che è unico per ciascun gruppo di voci. Per alcuni gruppi di voci esiste una voce leggibile dall'uomo che segue "NOME", ma questi sono abbastanza pochi che posso rimuoverli manualmente, quindi abbinarli non è un grosso problema.

Quindi quello che voglio fare è trovare ogni riga che inizia con Entry: e selezionarla fino alla fine della riga. Ogni voce in ciascun gruppo è su una riga separata. Quindi userò Trova e sostituisci per rimuovere queste righe dall'elenco.

AGGIORNAMENTO: Input & Outpu

Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: John
FamilyName: John
DearName: John
Organisation: Acme 1 Corp
Via: FAX-ANY 1(555) 123-4567

Entry: NAME ~00003193820
ShortName: ~00003193820
Owner: USRENAME
Name: Sam
FamilyName: Sam
DearName: Sam
Organisation: Acme 2 LLC
Via: FAX-ANY 1(555) 890-1234

Ecco due gruppi di voci. Voglio rimuovere le righe che iniziano con "Entry:" da ogni singolo gruppo.


Perché non importare in Excel, fare un filtro di testo ed eliminarli in quel modo. Puoi salvare nuovamente come CSV
Raystafarian il

Funzionerebbe in questo caso. Sto anche cercando di imparare come farlo in RegEx per le capacità future.
music2myear,

si prega di fornire input e output previsti con esempi
Siva Charan,

@ music2myear Roger that :)
Raystafarian,

Sono abbastanza sicuro che la mia domanda fosse abbastanza dettagliata. Ho specificato che avevo bisogno della sintassi RegEx che funzionerà in NotePad ++ per trovare una riga che inizi con Entry: ma con porzioni finali variabili. Nel caso non bastasse, ho aggiunto esempi specifici (disinfettati, ovviamente) dell'input e descrivo l'output desiderato. Ancora.
music2myear,

Risposte:


2

Un'altra opzione sarebbe

^Entry: NAME .*

Che cercherà le linee che iniziano con Entry: NAMEe qualsiasi cosa dopo.


Ok. Era il "." che mi mancava. Cosa fa il "." significare in RegEx?
music2myear,

@ music2myear Il punto ( .) è un segnaposto che significa "(quasi) ogni singolo carattere" .
Der Hochstapler,

@ music2myear Avrei dovuto spiegarlo quando ho pubblicato, di solito provo ad essere più dettagliato quando rispondo. [. ] in regex è "qualsiasi carattere" [*] in regex è "0 o più del modello" quindi in inglese "qualsiasi cosa o niente fino a un ritorno a
capo

3

utilizzando

^Entry: NAME ~\d+$

poiché il modello di ricerca sembra funzionare come richiesto.

Raccomanderei personalmente la corrispondenza usando il \dsegnaposto (che corrisponde a qualsiasi singola cifra nell'intervallo da 0a 9) anziché un .segnaposto più generale . In effetti, dovresti persino farlo:

^Entry: NAME ~\d{12}$

per specificare che ci si aspetta esattamente 12 cifre di fila. In questo modo, se una voce può contenere qualcosa che non ti aspettavi, non la sostituisci per caso.

Se la stringa risulta essere in notazione esadecimale, è possibile utilizzare:

^Entry: NAME ~[0-9a-fA-F]{12}$

Si noti che non ho verificato se gli ultimi 2 esempi funzionano correttamente in Notepad ++, ma per quanto ne so, questa è una sintassi piuttosto semplice.


Stavo per dire che abbinare solo caratteri numerici non mi avrebbe fatto molto bene ...
music2myear,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.