java - 合并两个正则表达式

标签 java regex

我有两个正则表达式,一个从 csv 字符串中提取用户名,另一个提取电子邮件。

字符串格式是这样的:

String s = "name lastname (username) <mail@mail.something.dk>; name lastname (username) <mail@mail.something.dk>; name lastname (username) <mail@mail.something.dk>";

我的正则表达式的代码是这样的。

Pattern pattern = Pattern.compile("(?<=\\()[^\\)]+");
Matcher matcher = pattern.matcher(s);
Pattern pattern2 = Pattern.compile("((?<=<)[^>]+)");
Matcher matcher2 = pattern2.matcher(s);

while (matcher.find() && matcher2.find()) {
    System.out.println(matcher.group() + " " + matcher2.group());
}

我发现了几个关于合并正则表达式的问题,但从答案中我无法弄清楚如何合并我的。

我的打印输出显示:

"username mail@mail.com"

我能否使用一个正则表达式从单个匹配器打印出相同的内容

obs:这是一项学校作业,这意味着我“不需要”合并它们或做更多的事情,但我想知道这是否可能,以及它会有多难。

最佳答案

您可以在多个正则表达式 之间使用竖线(|) 来匹配它们:-

    String s = "name lastname (username) <mail@mail.something.dk>; name lastname
            (username) <mail@mail.something.dk>; name lastname 
            (username) <mail@mail.something.dk>;";

    // Matches (?<=\\()[^\\)]+  or  ((?<=<)[^>]+)
    Pattern pattern = Pattern.compile("(?<=\\()[^\\)]+|((?<=<)[^>]+)");
    Matcher matcher = pattern.matcher(s);

    while (matcher.find()) {
        System.out.println(matcher.group());
    }

输出:-

username
mail@mail.something.dk
username
mail@mail.something.dk
username
mail@mail.something.dk

更新:-

如果你想打印 usernameemail 只有当它们都存在时,那么你需要在 ; 上拆分你的字符串然后应用以下每个正则表达式。

这是代码:-

    String s = "name lastname (username) ; 
                name lastname (username) <mail@mail.something.dk>; 
                name lastname (username) <mail@mail.something.dk>;";

    String [] strArr = s.split(";");

    for (String str: strArr) {

        Pattern pattern = Pattern.compile("\\(([^\\)]+)(?:\\))\\s(?:\\<)((?<=<)[^>]+)");
        Matcher matcher = pattern.matcher(str);

        while (matcher.find()) {
            System.out.print(matcher.group(1) + " " + matcher.group(2));
        }
        System.out.println();
    }

输出:-

username mail@mail.something.dk
username mail@mail.something.dk // Only the last two have both username and email

关于java - 合并两个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12858116/

相关文章:

java - JAVA 编译器是否处理函数作用域内的新实例化?

java - 如何在 JSP 中显示动态生成的 svg 图像(使用 Spring MVC)?

java - NoClassDefFoundError 但类存在

java - 斯卡拉/ jack 森 : how to deserialize into generic type

javascript - 根据位置突出显示按钮

java - Spring boot 中的 CORS 策略冲突

python - 正向回顾没有达到我的预期

java - java方法replaceAll()出错

javascript - 如何做多个正则表达式,每次都细化结果?

javascript - 正则表达式过滤掉某些字符组