Java Regex解析街道名称

Java Regex解析街道名称,java,regex,Java,Regex,我想使用以下代码从地址字符串中捕获街道名称 对于地址“77 ELM ST”,下面的代码告诉我“ELM”,这是正确的 对于地址“115 GEORGE APPLETON FOX ST”,代码给出了“APPLETON”。预期结果应该是“乔治·阿普尔顿·福克斯” 例如: private static String ADDRESS_PATTERN = "^\\d*\\s*(\\w+\\s*)*ST$"; public String parseStreet(String address) { Pa

我想使用以下代码从地址字符串中捕获街道名称

对于地址“77 ELM ST”,下面的代码告诉我“ELM”,这是正确的

对于地址“115 GEORGE APPLETON FOX ST”,代码给出了“APPLETON”。预期结果应该是“乔治·阿普尔顿·福克斯”

例如:

private static String ADDRESS_PATTERN = "^\\d*\\s*(\\w+\\s*)*ST$";

public String parseStreet(String address) {
    Pattern addressPattern = Pattern.compile(ADDRESS_PATTERN);
    Matcher matcher = addressPattern.matcher(address);
    boolean found = matcher.find();
    return found ? matcher.group(1).trim() : null;
}
"^\\d*\\s*((?:\\w+\\s*)*)ST$"

我做错了什么?

将捕获组放在要捕获的子比赛周围。例如:

private static String ADDRESS_PATTERN = "^\\d*\\s*(\\w+\\s*)*ST$";

public String parseStreet(String address) {
    Pattern addressPattern = Pattern.compile(ADDRESS_PATTERN);
    Matcher matcher = addressPattern.matcher(address);
    boolean found = matcher.find();
    return found ? matcher.group(1).trim() : null;
}
"^\\d*\\s*((?:\\w+\\s*)*)ST$"

将捕获组放在要捕获的子比赛周围。例如:

private static String ADDRESS_PATTERN = "^\\d*\\s*(\\w+\\s*)*ST$";

public String parseStreet(String address) {
    Pattern addressPattern = Pattern.compile(ADDRESS_PATTERN);
    Matcher matcher = addressPattern.matcher(address);
    boolean found = matcher.find();
    return found ? matcher.group(1).trim() : null;
}
"^\\d*\\s*((?:\\w+\\s*)*)ST$"

我希望正则表达式能给你
FOX
。你确定它给出了
APPLETON
?是的,它给出了APPLETONI会期望regex给你
FOX
。你确定它给了APPLETON吗?是的,它给了AppletonTanks!捕获子匹配是有效的。我可以使用:“^\\d*\\s*(\\w+\\s*)*)ST$”。您的解决方案还建议使用?:。这有什么作用?
(?:…)
是一个非捕获组。最好只捕获您需要的内容。@user106563
?:
用于创建非捕获组,这里我们不想捕获街道名称的单个单词,而是整个街道名称。谢谢!捕获子匹配很有效。我可以使用:“^\\d*\\s*(\\w+\\s*)ST$”。您的解决方案还建议使用?:。这有什么作用?
(?:…)
是一个非捕获组。最好只捕获所需的内容。@user106563
?:
用于创建非捕获组,这里我们不想捕获街道名称的单个单词,而是捕获整个街道名称。