【问题标题】:Extract comma separated units from source code using RegEx使用 RegEx 从源代码中提取逗号分隔的单元
【发布时间】:2020-08-20 09:45:21
【问题描述】:

我想使用正则表达式从我的源代码中提取信息。你能帮我建立一个检索源代码中使用的单位的正则表达式吗?

源代码示例:

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子句,但不单独返回每个文件名。

谢谢。

【问题讨论】:

    标签: regex delphi delphi-10.3-rio


    【解决方案1】:

    this page 表示 Delphi 使用 PCRE 正则表达式风格。

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

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

    说明

    • (?:非捕获组
      • ^ *uses\r?\n * 匹配字符串开头的可选空格,然后再匹配一个换行符和可选空格
      • |或者
      • \G(?!^) 在上一个匹配的末尾断言位置,而不是在开头(\G 锚在 2 个位置匹配,在字符串的开头或在上一个匹配的结尾)
    • )关闭非捕获组
    • (\w+) 捕获组 1 匹配 1+ 个单词字符
    • (?:,\s*|;$) 非捕获组,匹配逗号和 0+ 个空格字符或匹配字符串末尾的 ;

    Regex demo

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多