如何提取包含3个或更多a的标题?

时间:2013-06-03 20:02:06

标签: java hadoop mapreduce

我创建了代码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。

  1. Academia.edu - 分享研究

  2. 谷歌

  3. News12.gr | ΑθλητικήΕνημέρωσηαπόταΔωδεκάνησα

  4. 现在我希望输出包含:标题1和3(3因为有希腊网站并包含字母“α”),形式如下:

    Academia.edu - 分享研究,site_1.txt

    News12.gr | ΑθλητικήΕνημέρωσηαπόταΔωδεκάνησα,site_2.txt

    我尝试了正则表达式模式,如“?:[αa{3,}])。(?:[αa{3}])。”,但没有结果。 有人会帮忙吗?

    提前致谢!

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);
    }
}