Извлеките единицы, разделенные запятыми, из исходного кода с помощью RegEx
Aug 20 2020
Я хочу использовать регулярные выражения для извлечения информации из исходного кода. Можете ли вы помочь мне создать RegEx, которое извлекает единицы, используемые в исходном коде?
Пример исходного кода:
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;
...
...
Мне нужно получить имена файлов, разделенных запятыми, с момента uses
предложения до следующего ;
. В этом примере результат должен быть:
Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
Manteniment
Я пробую что-то вроде
^ *uses(\n* *(\w*),)* *\n* *(\w*) *;
Он соответствует предложению uses, но не возвращает каждое имя файла отдельно.
Спасибо.
Ответы
6 Thefourthbird Aug 20 2020 at 18:19
На этой странице говорится, что Delphi использует разновидность регулярных выражений PCRE.
В этом случае один из вариантов - использовать группу захвата в сочетании с \G
привязкой.
(?:^ *uses\r?\n *|\G(?!^))(\w+)(?:,\s*|;$)
Объяснение
(?:
Группа без захвата^ *uses\r?\n *
Сопоставьте необязательные пробелы с начала строки, затем сопоставьте и новую строку, за которой снова следует необязательные пробелы|
Или же\G(?!^)
Утверждать позицию в конце предыдущего совпадения, а не в начале (\G
Якорь совпадает в 2 позициях, либо в начале строки, либо в конце предыдущего совпадения)
)
Закрыть группу без захвата(\w+)
Группа захвата 1 Соответствует 1+ словосочетанию(?:,\s*|;$)
Группа без захвата, соответствует либо запятой и 0+ пробелам, либо соответствует;
в конце строки.
Демо Regex