我有一个输入String
,如下所示:
"I am Duc/N Ta/N Van/N"
字符串"/N"
表示它是一个人的名字
预期的输出是:
姓名:Duc Ta Van
如何使用正则表达式来完成?
答案 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
从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] +"作为正则表达式。
[]
=匹配集合
\/
=字面匹配字符/
(区分大小写)
+
=在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)