我目前正在使用扫描软件“Drive 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 \1:
----------------------------------------------------------------------
[^\r\n]+ any character except: '\r' (carriage
return), '\n' (newline) (1 or more times
(matching the most amount possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
或者使用环视仅捕获该行,以便
ordernr
不包括在捕获组 0 中并适应 \r
的所有变化和 \n
(?<=ordernr\r|ordernr\n|ordernr\r\n)[^\r\n]+
现场演示
https://regex101.com/r/pA4fD4/2
关于regex - 匹配正则表达式后选择下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37526216/