gpt4 book ai didi

java - 正则表达式匹配某些模式与换行符

转载 作者:搜寻专家 更新时间:2023-10-31 20:09:47 27 4
gpt4 key购买 nike

我想编写正则表达式来匹配以下模式:

From: ***********************
Sent: ***********************
To: ***********************
Subject: *******************

我把正则表达式写成

.*From:.+(\n)Sent:.+(\n)To:.+(\n)Subject:.+(\n).*

但这行不通。请帮助我,因为我是 regEx 的新手。

最佳答案

由于两个可能的原因,您的正则表达式不起作用:

  • 换行顺序可以是\r\n,或者\r,或者\n(或者更多,\u000B\u000C\u0085\u2028\u2029),但你只在 LF 中编码。添加可选的 CR(回车,\r)会有所帮助。
  • 此外,Subject:... 之后没有换行符,因此您需要将其删除。
  • 在 Java 8+ 中,有一个 special line break shorthand class, \R ,您可以使用它来匹配任何换行符序列。

你可以使用

From:.+\r?\nSent:.+\r?\nTo:.+\r?\nSubject:.+
From:.+\RSent:.+\RTo:.+\RSubject:.+

使用 Matcher#find() 搜索部分匹配项。

参见 regex demo

还有 IDEONE demo :

String p = "From:.+\r?\nSent:.+\r?\nTo:.+\r?\nSubject:.+"; 
// String p = "From:.+\\RSent:.+\\RTo:.+\\RSubject:.+"; // Java 8+ compliant
String s = "Some text before.....\r\nFrom: ***********************\r\nSent: ***********************\r\nTo: ***********************\r\nSubject: *******************";
Pattern pattern = Pattern.compile(p);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(0));
}

关于java - 正则表达式匹配某些模式与换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35571373/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com