例如,我有字符串“john smith 12 03 1993” 任务是将约翰史密斯推向另一个。 现在我正在尝试使用正则表达式[a-z] \ s (java验证),但它不起作用只给出没有约翰的“史密斯”
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());
答案 0 :(得分:1)
您只匹配1个0+字母和0个以上空格。
您需要在while循环中使用matcher.find()
并使用[a-z]+
或\b[a-z]+\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 demo。
如果你需要匹配"单词"在空格/字符串结尾之前,请使用"\\b[a-z]+(?!\\S)"
正则表达式。
要匹配john smith
,您可以使用"^[a-z]+(?:\\s+[a-z]+)*
"正则表达式(然后您可以将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
请参阅this Java demo。
答案 1 :(得分:1)
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”中的第一个单词,请将^
替换为.*
答案 2 :(得分:1)
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"));
}
}