正则表达式匹配前n个单词出现

时间:2013-01-01 11:28:58

标签: regex

我有一个格式的字符串:

word<class> word<class>...
For example:
I<Noun> like<verb> to<Function> eat<verb>...

是否可以使用正则表达式查找每个类出现的前n个单词,例如使用正则表达式的前4个单词。它将输出单词列表。

由于

3 个答案:

答案 0 :(得分:3)

正则表达式不能用于计数。

所以不 - 你找不到使用正则表达式的前n个单词。

答案 1 :(得分:1)

为了完成你正在做的事情,你需要使用词性标注器来分类句子中使用的单词类型。 您可以使用任何一种自然语言处理库来执行此操作。 例如。在python你有pynltk。 http://answers.oreilly.com/topic/1091-how-to-use-an-nltk-part-of-speech-tagger/

之后,您需要根据词性对单词进行分组并对其进行计数。 所以完全超出了正则表达式的范围。

答案 2 :(得分:0)

您的正则表达式模式为(\\s|^)([a-zA-Z]+?)<Noun>(\\s|$),在每次找到的匹配项中,您都应使用$2来获得结果

在c#中,您可以使用以下代码实现此目的:

     string type = "Noun";
     int top = 5;

     MatchCollection mc = Regex.Matches("I<Noun> like<verb> to<Function> eat<verb> an apple<Noun>", String.Format("(\\s|^)([a-zA-Z]+?)<{0}>(\\s|$)", type));

     List<string> res = new List<string>();

     for (int i = 0; i < mc.Count && i < top; i++)
     {
        res.Add(mc[i].Result("$2"));
     }