java

时间:2017-07-31 18:06:44

标签: java regex

我需要一个正则表达式,让我接受另一个词。 例如:

street address Maria and another st. lohberg and give me another av. darrwerg and another st example

所需的输出是:

maria,lohberg,darrwerd,example

Maybye如果有正则表达式可以解决这种情况:address: herman poortstrat this is text but not address给我:herman poortstrat但它比我认为的更复杂。 我有以下正则表达式:(?<=\bstreet\s)(\w+)但它只给我一个带有空格的街道地址。  我的正则表达式在&#34; street&#34;之后给我发短信。所以它可能是解决方案之一,但我需要更多的单词,如:"av.","av","av ","address"和其他组合。 一般来说,我想从文本中获取街道名称而不是其他内容。不是街道,它的数量只有街道。我的正则表达方式还不好,所以我请求你的帮助。

2 个答案:

答案 0 :(得分:2)

这将为您提供地址 st。 av。之后的字样 您可以根据需要调整它

public static void main(String[] args) {
    String str = "street address Santa Maria and another st. lohberg and give me another av. darrwerg and another st street";
    Pattern p = Pattern.compile("((address|st\\.|av\\.)\\s)(\\w+?\\s)");
    Matcher m = p.matcher(str);
    List<String> streets = new ArrayList<String>();
    while (m.find()) {
        streets.add(m.group(3));
    }
    System.out.println(streets);
}

答案 1 :(得分:1)

您需要使用

\b(?:street\s+address|(?:av|st)\b\.?)\s*(\w+)

请参阅regex demo

<强>详情

  • \b - 字边界
  • (?:street\s+address|(?:av|st)\b\.?) - 非捕获组匹配
    • street\s+address - street,1 +空格,address
    • | - 或
    • (?:av|st)\b\.? - avst 作为整个单词后跟可选的点
  • \s* - 0个或更多空格
  • (\w+) - 第1组:一个或多个单词字符

Java demo

String s = "street address Maria and another st. lohberg and give me another av. darrwerg and another st example";
Pattern p = Pattern.compile("\\b(?:street\\s+address|(?:av|st)\\b\\.?)\\s*(\\w+)", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
while (m.find()){
    System.out.println("Value: " + m.group(1));
}

结果:

Value: Maria
Value: lohberg
Value: darrwerg
Value: example