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.