以下句子映射正則表達式匹配到原始的字符串
我有一輛紅色轎車
可以轉化爲這個字符串
代詞動詞限定詞形容詞名詞
我想要的是找到部分原件句子是名詞短語(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表達式與正則表達式結合起來,那將是非常好的,以便保持轉換的來源。任何雖然?
PS。一個句子使用此代碼
RawSentence.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).Select(i=>i.Type.ToString()).Aggregate((x,y) => x + " " + y);
不能說我明白你在問什麼。 match * does *返回原始語句的匹配部分。如果您使用命名組,您甚至可以按名稱引用組。 – 2015-02-09 11:13:36
這裏的問題是我想要我的原始句子的相應部分。我正在執行的正則表達式操作的字符串是* not *原始字符串,它是一個轉換後的字符串。在這種情況下,我原來的句子是「我有一輛紅色的車」。對於這種分析,我需要將其轉換爲以下字符串:「代詞動詞Determiner形容詞名詞」。當我找到我的名詞短語時,我沒有一個清楚的方式來知道我原來的句子的哪一部分對應於它(「一輛紅色的汽車」)。 – Sturm 2015-02-09 11:17:12
沒有時間詳細說明,但想知道我會做什麼:您可以使用第二個正則表達式,將用空格分隔的未變換句子的每個單詞分組,然後使用捕獲變換句子的匹配組,而不是那些不捕獲的「(?:determineiner。?)」,然後在第二個正則表達式中使用你現有的匹配組。 – 2015-02-09 11:23:06