Extraiga unidades separadas por comas del código fuente usando RegEx

Aug 20 2020

Quiero usar expresiones regulares para extraer información de mi código fuente. ¿Me pueden ayudar a construir un RegEx que recupere las unidades utilizadas en el código fuente?

Ejemplo de código fuente:

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;
...
...     

Necesito obtener los nombres de archivo separados por comas desde la usescláusula hasta el siguiente ;. En esa muestra, la salida debe ser:

Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
Manteniment

estoy intentando algo como

^ *uses(\n* *(\w*),)* *\n* *(\w*) *;

Coincide con la cláusula uses, pero no devuelve cada nombre de archivo por separado.

Gracias.

Respuestas

6 Thefourthbird Aug 20 2020 at 18:19

En esta página dice que Delphi usa el sabor de expresión regular PCRE.

En ese caso, una opción es usar un grupo de captura en combinación con el \Gancla.

(?:^ *uses\r?\n *|\G(?!^))(\w+)(?:,\s*|;$)

Explicación

  • (?:Grupo de no captura
    • ^ *uses\r?\n *Haga coincidir espacios opcionales desde el comienzo de la cadena, luego haga coincidir y una nueva línea seguida de espacios opcionales nuevamente
    • |O
    • \G(?!^)Afirmar la posición al final del partido anterior, no al comienzo (El \Gancla coincide en 2 posiciones, ya sea al comienzo de la cadena o al final del partido anterior)
  • )Cerrar grupo de no captura
  • (\w+)Grupo de captura 1 Partido 1+ caracteres de palabra
  • (?:,\s*|;$)Grupo sin captura, haga coincidir una coma y más de 0 caracteres de espacio en blanco o haga coincidir ;al final de la cadena.

Demostración de expresiones regulares