例如,我有字符串“john smith 12 03 1993” 任务是将约翰·史密斯驱逐到另一艘船上。 现在我正在尝试使用正则表达式 [a-z]\s(java 验证),但它无法在没有 john 的情况下仅给出“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 个以上空格的 block 。
您需要在 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 .
关于java - 无法使用正则表达式从字符串中获取字符序列java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42005471/