如何读取具有特定开头的行

时间:2014-04-04 11:03:45

标签: java regex string

我有这样的邮件内容:

By: example@abc.com (could also be a username)
Subject: Test 
Message: This is a test message

然后我将此javax.Message转换为带有(String) getContent()的字符串。

现在我需要解析 By:部分。在示例中,我需要获取 example@abc.com 。但我无法使用正则表达式搜索电子邮件,因为按:部分也可能是用户名...所以我需要搜索 By:所在的位置并阅读整个下文。但我不知道如何做到这一点。

那我怎么能阅读 By:内容?

3 个答案:

答案 0 :(得分:2)

我认为通过这种方式你可以在不使用正则表达式的情况下获得它 -

  • 查找所需字符串的开始索引
  • 查找所需字符串的结束索引。
  • 使用开始和结束索引对您的实际字符串进行子串。

...

int begIndex = yourString.indexOf("By:")+3;
int endIndex = yourString.indexOf("Subject:");
yourString.substring(benIndex,endIndex);

现在您可以修剪结果字符串以获得所需的字符串值。

答案 1 :(得分:0)

您可以按照以下方式执行此操作:

(?<=By: )((\w+)(@(\w+)\.(\w+))?)

这使用正向lookbehind并仅在第'By: '之前匹配第二组 也适用于用户名。

这是一个演示:

http://regex101.com/r/rM1lR8

希望有所帮助

答案 2 :(得分:0)

试试这个例子。它将解析By之后的所有文本,直到换行符(假设By不在最后一行)。

String mailText = ".....";
Pattern pattern = Pattern.compile("(?<=[\n\r]|^)By:[ ]+(.*?)[\n\r]"); // assume By will not be at the last line
Matcher m = pattern.matcher(mailText);
while (m.find()) {
    System.out.println(m.group(1));
}

使用正向lookbehind (?<=[\n\r]|^)正则表达式检查字符串开头的By或新行字符后是否。{/ p>