您可以在多个Regex之间使用Pipe(|)来匹配所有这些: –
String s = "name lastname (username) ; name lastname
(username) ; name lastname
(username) ;";
// 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
更新: –
如果您只想在两者都存在时打印用户名和电子邮件,那么您需要拆分字符串;然后在每个上面应用以下正则表达式.
这是代码: –
String s = "name lastname (username) ;
name lastname (username) ;
name lastname (username) ;";
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