繁体   English   中英

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

[英]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]+)* ”正则表达式(然后你可以更换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

请参阅此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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM