[英]Cannot take char sequence from String using regex java
例如,我有字符串“ john smith 12 03 1993”的任务是将john smith弹出到另一个。 现在,我正在尝试使用正则表达式[az] \\ s (Java验证),但如果没有约翰,仅给“ smith”就行不通
String test = "john smith 11 12323 2323";
Pattern pattern = Pattern.compile("[a-z]*\\s*");
Matcher matcher = pattern.matcher(test);
matcher.matches();
matcher.find();
System.out.println(matcher.group());
您只能匹配1个0+字母和0+空格的块。
您需要在while循环中使用matcher.find()
并使用[az]+
或\\b[az]+\\b
类的正则表达式:
String test = "john smith 11 12323 2323";
Pattern pattern = Pattern.compile("[a-z]+");
Matcher matcher = pattern.matcher(test);
while (matcher.find()) {
System.out.println(matcher.group());
}
// => john, smith
请参阅Java演示 。
如果需要在字符串的空格/结尾之前匹配“单词”,请使用"\\\\b[az]+(?!\\\\S)"
正则表达式。
为了配合john smith
,你可以使用"^[az]+(?:\\\\s+[az]+)*
”正则表达式(然后你可以更换while
与if
因为你只想到1场)。
String test = "john smith 11 12323 2323";
Pattern pattern = Pattern.compile("^[a-z]+(?:\\s+[a-z]+)*");
Matcher matcher = pattern.matcher(test);
if (matcher.find()) {
System.out.println(matcher.group());
} // => john smith
请参阅此Java演示 。
String test = "john smith 11 12323 2323";
Pattern pattern = Pattern.compile("^([a-z]+ [a-z]+).*");
Matcher matcher = pattern.matcher(test);
matcher.matches();
System.out.println(matcher.group(1));
group(0)
始终是整个String(测试)。 如果单词不是“ test”中的第一件事,则用.*
替换^
Java有一些工具可以简化此过程:特别是使用命名组,您可以编写可读的正则表达式并轻松提取字段:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Class {
public static void main(String... args) {
final String test = "Андрей Парфёнов 05 15 1955";
final Pattern pattern = Pattern.compile("" +
"^(?<name>" +
"(?<firstName>.+)\\s+" +
"(?<lastName>.+))\\s+" +
"(?<date>" +
"(?<month>\\d{2})\\s+" +
"(?<day>\\d{2})\\s+" +
"(?<year>\\d{4}))$");
final Matcher matcher = pattern.matcher(test);
matcher.matches();
System.out.println(matcher.group("name"));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.