正则表达式匹配字符串并排除其他所有内容直到新行

时间:2017-10-17 18:07:34

标签: java regex

This解决方案在某种程度上解决了我的问题,但需要在Ordernr之后排除任何字符,直到回车(新行)

  1. 21Sid1
  2. Ordernr
  3. E17222
  4. 通过
  5. 卖方
  6. 我正在使用 ordernr [\ r \ n] +([^ \ n \ r] +) 来匹配 ordernr E17222 以上。 我想对下面的情况做同样的事情:

    1. 21Sid1
    2. Ordernr 将所有内容略读到新行
    3. E17222
    4. 通过
    5. 卖方
    6. 在找到Ordernr之前,基本上排除所有内容,直到换行并抓住下一行

1 个答案:

答案 0 :(得分:1)

这应该做:

/Ordernr.*[\r\n]+(.*)/g

因为,.*匹配除了行终结符之外的所有内容,所以我们在 Ordernr 之后匹配所有内容,除了使用.*的新行,然后是新行并再次捕获使用(.*)在下一行进行改编。

现场演示here

以下是Java中的示例代码:

String line = "21Sid1\nOrdernr Skip everything upto new line\nE17222\nBy\nSeller";
Pattern pattern = Pattern.compile("Ordernr.*[\r\n]+(.*)");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
    System.out.println("group 1: " + matcher.group(1));
}else{
    System.out.println("No match found");
}

输出:

  

第1组:E17222

检查结果here

修改

要使此正则表达式与点匹配所有 consraint一起使用,请尝试以下操作:

/Ordernr[^\n\r]*[\r\n]+([^\n\r]*)/g

这里我已经取代了dot以匹配除新行之外的所有内容。