Select 匹配正则表达式后的下一行

Select the next line after match regex

我目前正在使用扫描软件 "Drivve Image" 从每篇论文中提取某些信息。如果需要,该软件可以使某些 Regex 代码成为 运行。它似乎是 运行 与 UltraEdit 正则表达式引擎。

我得到以下扫描结果:

 1. 21Sid1
 2. Ordernr
 3. E17222
 4. By
 5. Seller

我需要在字符串中搜索文本 Ordernr,然后选择下面的行 E17222,最后这行将是扫描文档的文件名。我永远不会知道这两个值在字符串中的确切位置。这就是我需要关注 Ordernr 的原因,因为我需要的文本将始终跟在下一行之后。

我的要求是我需要 E17222 是匹配结果中唯一的东西,这样才能工作。我只能输入 纯正则表达式。

已经有一个很棒的线程:Regex to get the words after matching string

我测试了“\bOrdernr\s+\K\S+”效果很好..

要不是软件不允许使用/K。还有其他实现 \K 的方法吗?

继续

虽然如果示例文本涉及 "Ordernr" 后面的字符,则当前答案无法达到我需要的程度。喜欢这个样本:

21Sid1

订单 1

E17222

卖家

当前解决方案选择“1”而不是“下一行”,后者是“E17222”。在匹配组中。需要指出这一点以便进一步参与该问题。

描述

ordernr[\r\n]+([^\r\n]+)

此正则表达式将执行以下操作:

  • 找到 ordernr 子串
  • 将行放在 ordernr 捕获组 1
  • 之后

例子

现场演示

https://regex101.com/r/dQ0gR6/1

示例文本

 1. 21Sid1
 2. Ordernr
 3. E17222
 4. By
 5. Seller

样本匹配

[0][0] = Ordernr
 3. E17222
[0][1] =  3. E17222

说明

NODE                     EXPLANATION
----------------------------------------------------------------------
  ordernr                  'ordernr'
----------------------------------------------------------------------
  [\r\n]+                  any character of: '\r' (carriage return),
                           '\n' (newline) (1 or more times (matching
                           the most amount possible))
----------------------------------------------------------------------
  (                        group and capture to :
----------------------------------------------------------------------
    [^\r\n]+                 any character except: '\r' (carriage
                             return), '\n' (newline) (1 or more times
                             (matching the most amount possible))
----------------------------------------------------------------------
  )                        end of 
----------------------------------------------------------------------

或者

只使用 look-around 捕获行,以便 ordernr 不包含在捕获组 0 中并容纳 \r\n

(?<=ordernr\r|ordernr\n|ordernr\r\n)[^\r\n]+

现场演示

https://regex101.com/r/pA4fD4/2

进行了一些谷歌搜索,据我所知,REGEXP.MATCH 的最后一个参数是要使用的捕获组。这意味着您可以使用自己的正则表达式,而无需 \K,只需将捕获组添加到要提取的号码即可。

 \bOrdernr\s+(\S+)

这意味着该数字最终在捕获组 1 中(整个匹配项在 0 中,我假设您已经使用过)。

文档不crystal清楚,但我猜语法是

REGEXP.MATCH(<ZoneName>, "REGEX", CaptureGroup)

意味着你应该使用

REGEXP.MATCH(<ZoneName>, "\bOrdernr\s+(\S+)", 1)

虽然这里有很多猜测......;)