正则表达式将特定字符串与字符匹配>

时间:2011-12-01 14:26:42

标签: regex

我有两个看起来像这样的字符串

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;结束。

有任何帮助吗?谢谢!

5 个答案:

答案 0 :(得分:0)

您可以使用此

From: (".*?" )?<.*?>

答案 1 :(得分:0)

这是一个很好的起点,但您需要匹配所有字符,直到>,因此将其更改为:

From: ["<][^>]*>

答案 2 :(得分:0)

这将有效(使用RegExBuddy中的两行文字进行测试)

.*<(.*)>

匹配将在捕获组1中返回。

RegexBuddy screen capture

答案 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)?(<[^>]+>)

继续:http://regexr.com?2vbu3

在Java中

更新:,你需要像"一样逃避\

Pattern pat = Pattern.compile("\sFrom: (\"[^\"]+\"\s)?(<[^>]+>)");