merge two regular expressions

java, regex

Solution

You can just use an `Pipe (|)` in between your `multiple Regex`, to match all of them : -

    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());
    }

OUTPUT: -

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

UPDATE: -

If you want to print `username` and `email` only when they both exists, then you need to split your string on `;` and then apply the below Regex on each of them.

Here's the code: -

    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();
    }

OUTPUT: -

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

Problem

I have two regular expressions, one pulling out usernames from a csv string, and the other pulling out emails. the string format is like this: ``` String s = "name lastname (username) <mail@mail.something.dk>; name lastname (username) <mail@mail.something.dk>; name lastname (username) <mail@mail.something.dk>"; ``` the code for my regular expressions are like this. ``` 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()); } ``` I've found several qeustions about merging regexes, but from the answers i haven't been able to figure out how to merge mine. my printouts show: ``` "username mail@mail.com" ``` would I be able to print out the same from a single matcher, using one regex? obs: this is a school assignment, which means i do not "need" to merge them or do any more, but i'd like to know if it is possible, and how difficult it would be.

Original source