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)
要使用环视只是捕捉行,以便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
做了一些谷歌搜索,据我所知,最后一个参数REGEXP.MATCH
是要使用的捕获组。这意味着您可以使用自己的正则表达式,而无需\K
, 只需将捕获组添加到要提取的数字中即可。
\bOrdernr\s+(\S+)
Run Code Online (Sandbox Code Playgroud)
这意味着该数字最终在捕获组中1
(0
我假设您已经使用了整个匹配项)。
文档不是很清楚,但我想语法是
REGEXP.MATCH(<ZoneName>, "REGEX", CaptureGroup)
Run Code Online (Sandbox Code Playgroud)
意思是你应该使用
REGEXP.MATCH(<ZoneName>, "\bOrdernr\s+(\S+)", 1)
Run Code Online (Sandbox Code Playgroud)
不过这里有很多猜测......;)