正则表达式匹配一些模式与换行符

时间:2016-02-23 07:32:56

标签: java regex

我想写一个regEx来匹配以下模式:

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

我将regEx写为

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

但这不起作用。请帮助我,因为我是regEx的新手。

4 个答案:

答案 0 :(得分:4)

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

  • 换行符序列可以是\r\n\r\n,但您只能在LF中进行编码。添加可选的CR(回车符\r)可以提供帮助。
  • 此外,在Subject:...之后,没有换行符,因此您需要将其删除。

您可以使用

From:.+\r?\nSent:.+\r?\nTo:.+\r?\nSubject:.+

搜索与Matcher#find()的部分匹配。

请参阅regex demo

IDEONE demo

String p = "From:.+\r?\nSent:.+\r?\nTo:.+\r?\nSubject:.+"; 
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)); 
} 

答案 1 :(得分:0)

你可以使用这样的东西;

From:.+\nSent:.+\nTo:.+\nSubject:.+

您提供的正则表达式可能会失败,因为您不需要启动.*,因为您要从“发件人:”部分进行捕获。

如果您只想捕捉文字;

From:(.+)\nSent:(.+)\nTo:(.+)\nSubject:(.+)

,其中

$ 1 - >来自文字

$ 2 - >已发送文字

$ 3 - >发短信

$ 4 - >主题文字

您可以使用任何使用任何语言的函数的正则表达式来获取这些捕获的组

答案 2 :(得分:0)

这可以通过以下方式实现:

getResultObject()

如果您使用^From:\s.(?P<from>.+)\R # look for "From:" at the beginning of the line/string, # followed by a capturing group and `R` Sent:\s(?P<sent>.+)\R # same as above To:\s(?P<to>.+)\R Subject:\s(?P<subject>.+) (即PCRE等),则代码可以使用 请参阅a demo here on regex101.com(带PHPm标记)。

答案 3 :(得分:0)

IMO你可以使用这样的正则表达式:

/^(?=From: ).*([\r\n]|\r\n)(?=Sent: ).*([\r\n]|\r\n)(?=To: ).*([\r\n]|\r\n)(?=Subject: ).*$/gm

[Regex Demo]