在Java中使用正则表达式从String中提取信息

时间:2018-05-03 08:56:19

标签: java regex string

我有一个输入String,如下所示:

"I am Duc/N Ta/N Van/N" 

字符串"/N"表示它是一个人的名字 预期的输出是:

  

姓名:Duc Ta Van

如何使用正则表达式来完成?

3 个答案:

答案 0 :(得分:3)

这是用于捕获每个"名称"的正则表达式。前面有/N

(\w+)\/N

使用Regex101

进行验证

现在,您只需循环String中的每个匹配并连接以获得结果:

String pattern = "(\\w+)\\/N";
String test = "I am Duc/N Ta/N Van/N";
Matcher m = Pattern.compile(pattern).matcher(test);

StringBuilder sbNames = new StringBuilder(); 
while(m.find()){
    sbNames.append(m.group(1)).append(" ");
}
System.out.println(sbNames.toString());
  

Duc Ta Van

它给你最难的部分。我让你根据自己的需要进行调整。

注意:
在java中,不需要转义正斜杠,但要在整个答案中使用相同的正则表达式,我将保留"(\\w+)\\/N",但"(\\w+)/N"也可以。

答案 1 :(得分:3)

你可以像这样使用Pattern和Matcher:

String input = "I am Duc/N Ta/N Van/N";
Pattern pattern = Pattern.compile("([^\\s]+)/N");
Matcher matcher = pattern.matcher(input);
String result = "";
while (matcher.find()) {
    result+= matcher.group(1) + " ";
}

System.out.println("Name: " + result.trim());

输出

Name: Duc Ta Van

使用Java 9 +的另一种解决方案

从Java9 +开始,你可以像这样使用Matcher::results

String input = "I am Duc/N Ta/N Van/N";
String regex = "([^\\s]+)/N";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String result = matcher.results().map(s -> s.group(1)).collect(Collectors.joining(" "));

System.out.println("Name: " + result); // Name: Duc Ta Van

答案 2 :(得分:0)

我已经使用了" [/ N] +"作为正则表达式。

Regex101

[] =匹配集合

中的字符

\/ =字面匹配字符/(区分大小写)

+ =在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)