Estrai unità separate da virgola dal codice sorgente utilizzando RegEx
Aug 20 2020
Voglio usare le espressioni regolari per estrarre informazioni dal mio codice sorgente. Potete aiutarmi a costruire una RegEx che recuperi le unità utilizzate sul codice sorgente?.
Esempio di codice sorgente:
unit ComandesVendes;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Manteniment;
type
TFComandesVendes = class(TFManteniment,ActualitzacioFinestra)
QRCapsaleraNumero: TIntegerField;
QRCapsaleraData: TDateTimeField;
QRCapsaleraDataEntrega: TDateTimeField;
...
...
Ho bisogno di ottenere i nomi dei file separati da virgole dalla uses
clausola fino al successivo ;
. In quell'esempio l'output deve essere:
Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
Manteniment
Sto provando qualcosa del genere
^ *uses(\n* *(\w*),)* *\n* *(\w*) *;
Corrisponde alla clausola uses, ma non restituisce ciascun nome di file separatamente.
Grazie.
Risposte
6 Thefourthbird Aug 20 2020 at 18:19
In questa pagina si dice che Delphi utilizza il sapore regex PCRE.
In tal caso, un'opzione consiste nell'utilizzare un gruppo di acquisizione in combinazione con l' \G
ancora.
(?:^ *uses\r?\n *|\G(?!^))(\w+)(?:,\s*|;$)
Spiegazione
(?:
Gruppo non di cattura^ *uses\r?\n *
Abbina gli spazi facoltativi dall'inizio della stringa, quindi abbina e una nuova riga seguita di nuovo da spazi facoltativi|
O\G(?!^)
Asserire la posizione alla fine della partita precedente, non all'inizio (l'\G
ancora corrisponde a 2 posizioni, all'inizio della stringa o alla fine della partita precedente)
)
Chiudi gruppo non di acquisizione(\w+)
Cattura gruppo 1 Abbina 1+ caratteri di parola(?:,\s*|;$)
Gruppo non di acquisizione, corrisponde a una virgola e 0+ caratteri spazi bianchi o corrisponde;
alla fine della stringa.
Dimostrazione regolare