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

标签 regex regex-negation regex-lookarounds

我目前正在使用扫描软件“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]+)
Regular expression visualization
此正则表达式将执行以下操作:
  • 找到 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]+
    
    Regular expression visualization
    现场演示
    https://regex101.com/r/pA4fD4/2

    关于regex - 匹配正则表达式后选择下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37526216/

    相关文章:

    正则表达式帮助不是 a-z 或 0-9

    c# - 排除开头但包含结尾

    regex - 电子邮件验证 - @ 之前和点之前的字符长度

    java - 在 Java 中使用正则表达式更改字符串

    php - 在任意正则表达式中插入正向后向模拟字节偏移的后果

    .net - 正则表达式返回最后十三位数字的前十二位?

    java - 正则表达式中的负向前瞻匹配所有接受特定字符的内容

    Java 字符串 : Replace a string containing $ sign

    java - 除非出现两次,否则如何匹配字符的任何出现?

    ruby - 正则表达式匹配 string1,除非前面有 string2