2011-06-21 3 views
0

単語の組み合わせのコレクションがある場合、一致する単語セットのコレクションを返し、指定された文字列からそれらを正規表現を使用して抽出できますか?C#Regexは、数字で始まり特定のリストに含まれるすべての単語を抽出しますか?

例えば、車のリスト与えられた:

mazda 3 
mazda 4 
volvo s40 

次のテキストが使用されている:
「私はボルボS40が90gvとのより良い取引であることが判明しかし、私はマツダ3を購入したいですタイヤ。 "

私はどのように返す必要があり、このからの二つの異なるリストたい:

{mazda 3, volvo s40, 90gv} 
{I, wanted, to, buy, a, however, I, found, the, to, be, a, much, better, deal, with, the, tires} 
+0

これらは数字で始まる単語ではありません。これらは、スペースと数字が続く単語と、残りのすべての単語のリストです。効果的なコーダーになるためには、問題空間をよりよく表現することを学ぶ必要があります。 – Oded

答えて

1

このコードが一致(車種)、およびリターン「」のためのMatchEvaluatorを使用するため、モデルが空の文字列に置き換えられます。 carsは車種の一覧です。 wordsは残りの単語のリストです。あなたの必要に応じて句読点を適切に処理するためにあなたに残しておきます。

List<string> cars = new List<string>(); 
string input = 
    "I wanted to buy a mazda 3 however I found the volvo s40 to be a much better deal."; 
string line = Regex.Replace(
    input, @"\b\w+\s+(?=\S*?\d)(?:\w+)", 
    m => 
     { 
     cars.Add(m.Value); 
     return ""; 
     }); 
string [] words = line.Split(' '); 

// Ouput the lists: 
Console.Write ("Cars:"); 
foreach (string car in cars) 
    Console.Write(car + " "); 
Console.WriteLine(); 
Console.Write ("words: "); 
foreach (string word in words) 
    Console.Write(word + " "); 

は、この出力を生成します

Cars:mazda 3 volvo s40 
words: I wanted to buy a however I found the to be a much better deal. 
+0

これは素晴らしいですが、どのようにこれと一緒に、車のリストにない番号で始まる単語を返すために、正規表現を書くだろう...その3(マツダ3から)が返されないように別に、上で編集したように、 "90gv"がカーリストの一部として返されますか? – ElHaix

+0

返されるべき単語(マツダとボルボのようなもの)と '90gv'のようなもの以外の違いをどうやって分かりますか?それらを関数に渡したいのですか? –

+0

あなたの言っていることが分かります。私はこれが私が達成したいと思うもののために働くかもしれないと思う。テストする必要があります。ありがとうございました。 – ElHaix

関連する問題