2015-10-21 72 views
1

我有一个字符串正则表达式字之间

Yangebup,珀斯,澳大利亚,日期为2011-01-09

雅加达,印尼,日期为2013年8月24日

所以我想获取位置名称Yangebup, Perth, AustraliaJakarta, Indonesia

如何使用正则表达式获取该位置名称?我试图使用此代码.+?,\bDated\b,但结果是找不到匹配项。

我也尝试用regexpal.com来测试我的正则表达式,用这个代码.+\bdated\b我可以得到它,但是我必须使用Case不敏感(i),当我将它写入我的java程序时,结果仍然没有任何结果。

回答

1

使用此正则表达式:

^(.*), Dated \d{4}-\d{2}-\d{2}$ 

List<String> locations = new ArrayList<String>(); 
locations.add("Yangebup, Perth, Australia, Dated 2011-01-09"); 
locations.add("Jakarta, Indonesia, Dated 2011-01-09"); 

String pattern = "^(.*), Dated \\d{4}-\\d{2}-\\d{2}$"; 
Pattern r = Pattern.compile(pattern); 

for (String location : locations) { 
    Matcher m = r.matcher(location); 
    if (m.find()) { 
     System.out.println("Found a location: " + m.group(1)); 
    } else { 
     System.out.println("NO MATCH"); 
    } 
} 

输出:

Found a location: Yangebup, Perth, Australia 
Found a location: Jakarta, Indonesia 
+0

这是一个很好的模式,但我的问题是如何让印尼雅加达也。实际上我有大约7000个这样的位置,里面有3个以上的单词。如何获取所有的位置名称? –

+0

这适用于'雅加达,印度尼西亚,2013-08-24日期'以及。如果除了一个正则表达式,你想分开城市和国家对,你可以尝试使用'String.split()'。 –

+0

实际上我可以得到结果,但我仍然困惑如何获得另一个位置,如果我有不同的字符串,我必须全部更改所有匹配器? –