java - 无法使用正则表达式从字符串中获取字符序列java

标签 java regex

例如,我有字符串“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]+)*"正则表达式(然后您可以替换whileif 因为您只期望 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/

相关文章:

PHP:正则表达式忽略引号内的转义引号

regex - 使用内容定界符作为文件名在PowerShell中拆分文本

javascript - 如何优化正则表达式?

regex - regexp_replace 上的函数导致 Postgres

java - 当我返回 null 时,assertEquals 失败

java - 测试未执行 - JUnit 5 编程 + mvn exec

java - 在 AWS cloudwatch 中记录我的 java 服务的异常

java - Java 中是否有 EXT.NET 框架的等效项?

javascript - 解析字符串中的主题标签( anchor 标记除外)

java - 使用后退键时是否可以强制重新绘制 Activity ?