使用RegEx从源代码中提取逗号分隔的单位

问题描述

我想使用正则表达式从源代码提取信息。您能帮我建立一个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子句匹配,但不会单独返回每个文件名。

谢谢。

解决方法

this page,它表示Delphi使用PCRE正则表达式。

在这种情况下,一种选择是将捕获组与\G锚点结合使用。

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

说明

  • (?:非捕获组
    • ^ *uses\r?\n *从字符串的开头匹配可选的空格,然后匹配并换行,并再次跟上可选的空格
    • |
    • \G(?!^)在上一个匹配项的末尾而不是开始处声明位置(\G锚点在字符串的开头或上一个匹配项的两个位置处匹配匹配)
  • )关闭非捕获组
  • (\w+)捕获第1组匹配1个以上的文字字符
  • (?:,\s*|;$)非捕获组,匹配逗号和0+个空格字符,或匹配字符串末尾的;

Regex demo