映射正则表达式匹配原始字符串

时间:2015-02-09 11:08:34

标签: c# regex

以下句子

  

我有一辆红色汽车

可以转换为此字符串

  

Pronoun Verb Determiner形容词名词

我想要的是找到原始句子的一部分是名词短语(NP)。 NP的简单模式是(确定者)*(形容词)*(名词)(其中*表示该组可能出现零次或多次)。实际的正则表达式是:

public static string Regex = "((?:Determiner.?)*(?:Adjective.?)*(?:Noun.?))";

使用以下代码可以提取所有NP:

        MatchCollection NPmatches = Regex.Matches(structure, NounPhrase.Regex); 
        foreach(Match match in NPmatches)
        {
            foreach (Capture NPcapture in match.Captures)
            {
                Console.WriteLine(NPcapture.Value.ToString());
            }
        }

输出将是:

  

确定者形容词名词

我真正需要的是与该结构(NP)对应的原始句子的一部分,在这种情况下它将是

  一辆红色汽车

我可以用某种方式弄清楚正则表达式匹配的位置,并计算那里的单词数量,但它很混乱且容易出错。如果可以使用一些LINQ表达式结合regex来完成,那将是很好的,以便保持转换源的范围。有没有?

PS。使用此代码将句子转换为类型

RawSentence.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).Select(i=>i.Type.ToString()).Aggregate((x,y) => x + " " + y);

1 个答案:

答案 0 :(得分:1)

我认为您需要的不仅仅是从原始句子到单词"代词","动词","确定者",&#34形容词"和"名词"。您确实指出某些词性(即您的决定者,形容词和名词)可能会出现零次或多次。如果它们出现不止一次,那么即使你确实有从原始句子到你的词性的映射,你也不能回到原始文本,因为你会有一个 - 很多关系。您需要将您的决定者,形容词和名词唯一标记,例如determininer1,determininer2,adjective1,noun1,noun2,noun3等。一旦获得了独特的映射,您就可以轻松地向任一方向移动。

相关问题