我创建了代码http://paste.ubuntu.com/5730390/,我试图从一些网站中提取包含3个或更多a(upercase或lowcase)的标题,也包括α(希腊字母)。我已经在本地硬盘上存储了txt格式的网站内容(有大量的网站)。
我在dfs中的输入如下:site_1.txt,site_2.txt,site_3.txt等。
认为以下标题分别属于site_1.txt,site_2.txt,site_3.txt。
Academia.edu - 分享研究
谷歌
News12.gr | ΑθλητικήΕνημέρωσηαπόταΔωδεκάνησα
现在我希望输出包含:标题1和3(3因为有希腊网站并包含字母“α”),形式如下:
Academia.edu - 分享研究,site_1.txt
News12.gr | ΑθλητικήΕνημέρωσηαπόταΔωδεκάνησα,site_2.txt
我尝试了正则表达式模式,如“?:[αa{3,}])。(?:[αa{3}])。”,但没有结果。 有人会帮忙吗?
提前致谢!
答案 0 :(得分:2)
要匹配3个或α个,不一定是彼此相邻,您可以使用此正则表达式:
(?:[αa].*){3}
答案 1 :(得分:1)
这听起来不像是一个hadoop问题,只是一个正则表达式问题。您只需要匹配a
或alpha 3次或更多次。以下正则表达式将执行技巧"([aα].*){3,}"
。
String files[] = {
"Academia.edu - Share research",
"Google",
"News12.gr | Αθλητική Ενημέρωση από τα Δωδεκάνησα"};
String regexpattern = "([aα].*){3,}";
Pattern pattern = Pattern.compile(regexpattern);
for (String file: files){
Matcher matcher = pattern.matcher(file);
while (matcher.find()){
System.out.println("file name matched '" + file+"'");
}
}
答案 2 :(得分:0)
您可以使用replace
来实现此目标:
public static int howMany(String str, char c) {
String str2 = str.replace(c+"", "");
return str.length() - str2.length();
}
然后你可以使用上面的方法:
for(String website : websites) {
if(howMany(website, 'a') >= 3 || howMany(website, 'α')) {
System.println(website);
}
}