我有两个看起来像这样的字符串
X-Antivirus-Mail-From: firstemail@home.com via mail From: "Test UserAccount" <mygmail@gmail.com> there is more information past this
X-Antivirus-Mail-From: secondemail@home.com via mail From: <mysecondgmail@gmail.com> there is more information past this
我正在尝试创建一个正则表达式,它将为第一个字符串
返回此值From: "Test UserAccount" <mygmail@gmail.com>
这是第二个字符串
From: <mysecondgmail@gmail.com>
到目前为止,我的正则表达式看起来像这样
From: ["<].*
但我希望它始终以角色&gt;结束。
有任何帮助吗?谢谢!
答案 0 :(得分:0)
您可以使用此
From: (".*?" )?<.*?>
答案 1 :(得分:0)
这是一个很好的起点,但您需要匹配所有字符,直到>
,因此将其更改为:
From: ["<][^>]*>
答案 2 :(得分:0)
答案 3 :(得分:0)
这似乎有效:
mail (From: .*\s*<.*>)
圆括号中的内容应该作为一个组进行匹配,这样您就可以在不出任何问题的情况下提取所需的文本。
编辑,因为你提到使用Java:
你需要这样做:
^.*mail (From: .*\s*<.*>).*$
默认情况下,Java会向String添加锚点,这可能会使您更难匹配。
您可以查看Oracle的this Regex教程。
这对我有用:
public static void main(String[] args) {
String str1 = "X-Antivirus-Mail-From: firstemail@home.com via mail From: \"Test UserAccount\" <mygmail@gmail.com> there is more information past this";
String str2 = "X-Antivirus-Mail-From: secondemail@home.com via mail From: <mysecondgmail@gmail.com> there is more information past this ";
Pattern pat = Pattern.compile("^.*mail (From: .*\\s*<.*>).*$");
Matcher m1 = pat.matcher(str1);
if (m1.matches())
{
System.out.println(m1.group(1));
}
Matcher m2 = pat.matcher(str2);
if (m2.matches())
{
System.out.println(m2.group(1));
}
}
收率:
From: "Test UserAccount" <mygmail@gmail.com>
From: <mysecondgmail@gmail.com>
答案 4 :(得分:0)
试试这个:
\sFrom: ("[^"]+"\s)?(<[^>]+>)
在Java中 更新:,你需要像"
一样逃避\
:
Pattern pat = Pattern.compile("\sFrom: (\"[^\"]+\"\s)?(<[^>]+>)");