匹配正则表达式后选择下一行

R0j*_*iv4 3 regex regex-negation regex-lookarounds

我目前正在使用扫描软件"Drivve Image"从每篇论文中提取某些信息.该软件可以根据需要运行某些正则表达式代码.它似乎与UltraEdit Regex引擎一起运行.

我得到以下扫描结果:

 1. 21Sid1
 2. Ordernr
 3. E17222
 4. By
 5. Seller
Run Code Online (Sandbox Code Playgroud)

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

我的要求是这样的,我需要E17222成为匹配结果中唯一可以工作的东西.我只允许输入普通的正则表达式.

已经有一个很棒的线程:正则表达式匹配字符串后得到的单词

我测试了" \ bOrdernr\s +\K\S + "这很棒..

是不是软件不允许使用/ K. 有没有其他方法来实现\ K?

延续

虽然如果示例文本涉及"Ordernr"背后的角色,但是当前的答案在我需要的范围内不起作用.像这个样本:

21Sid1

Ordernr 1

E17222

通过

卖家

当前的解决方案选择"1"而不是" 下一行 ",这将是" E17222 ".在匹配组中.需要指出进一步参与该问题.

Ro *_* Mi 21

描述

ordernr[\r\n]+([^\r\n]+)
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

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

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

现场演示

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

示范文本

 1. 21Sid1
 2. Ordernr
 3. E17222
 4. By
 5. Seller
Run Code Online (Sandbox Code Playgroud)

样本匹配

[0][0] = Ordernr
 3. E17222
[0][1] =  3. E17222
Run Code Online (Sandbox Code Playgroud)

说明

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 \1:
----------------------------------------------------------------------
    [^\r\n]+                 any character except: '\r' (carriage
                             return), '\n' (newline) (1 or more times
                             (matching the most amount possible))
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

Alternativly

要使用环视只是捕捉行,以便ordernr不会在捕获组0包括在内,以适应所有变化\r\n

(?<=ordernr\r|ordernr\n|ordernr\r\n)[^\r\n]+
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

现场演示

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

  • 我也可以确认这个答案也有效。尽管我对正则表达式的了解有限,因此我不确定哪个答案更好......“如果有这样的事情”。@罗哟米 (2认同)

Sam*_*han 8

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

 \bOrdernr\s+(\S+)
Run Code Online (Sandbox Code Playgroud)

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

文档不是很清楚,但我想语法是

REGEXP.MATCH(<ZoneName>, "REGEX", CaptureGroup)
Run Code Online (Sandbox Code Playgroud)

意思是你应该使用

REGEXP.MATCH(<ZoneName>, "\bOrdernr\s+(\S+)", 1)
Run Code Online (Sandbox Code Playgroud)

不过这里有很多猜测......;)