2017-01-11 16 views
0

私は"impportent words"の文章と単一の単語を持つlinqリストを持っています。regex正確な単語/文の一致を見つけよう

私は結果が配列か何かで終わる必要があります。最後"sentence_to_search_for_importent_word"

で発見されimportent_wordsから任意の単語や文章があるかどうか見つける必要があります。ここ

は、私が知っているまで行って何..です

List<string> importent_words = new List<string>() {"age", "what is", ".", "pages"} 

string sentence_to_search_for_importent_words = "what is your age."; 

私は文章中importent_wordsを見つけ、リストに出力されたすべての一致を取得する必要があります

私はこれを試してみてくださいそれは本当にありません仕事

var pattern = new Regex(@"\w+"); 
var qa = pattern.Split(first_sentence.ToLower()).Where(w => importent_words.Contains(w)); 
を行う それは「年齢」ではない「年齢」を返すためにも、それだけではなく、「何を」

「何であるか」を見つける必要があります持っている

\wで10

は年齢を見つけるように見えるが、それは出力のみ"this"代わりにそれが問題のように思える"this is"

の「これは、」複数の単語であるということです。

+5

あなたは 'importent_words.Where(x => sentence.Contains(x))'を探していますか?なぜ正規表現ですか? – Sayse

+0

私は同意する、正規表現を使用して2番目の問題を紹介する、あなたはパターンを探していないので、基本的なチェックは10倍良いでしょう –

+0

私はちょうど正規表現が速かったと思った、どんな解決の魔法使いもちょうどいいですよね –

答えて

4

あなたが探しているすべてのは、これが大文字小文字を区別する必要がある場合は、あなたの文に表示され、重要な単語は、あなただけの

importent_words.Where(x => sentence.Contains(x)) 

を使用することができ、あなたがからContains(x)の代替品を見つけることができる場合にはCase insensitive 'Contains(string)'に答えてください(現在の正規表現の試行では、sentence.ToLower()を使用してください)

+1

これは魔法私はそれを複雑にしました。 –

0

拡張可能な正規表現ソリューションをご希望の場合に備えてください。マッチは正規表現パターンのためにエスケープする必要があります。このためにRegex.Escape()を利用することができます。

List<string> importent_words = new List<string>() { "age", "what is", @"\.", "ages", "bob" }; 
string sentence_to_search_for_importent_words = "what is your age. Frank"; 
string regexString = string.Join("|" , importent_words.ToArray()); 
Regex wordRegex = new Regex(regexString); 

string[] result = wordRegex.Matches(sentence_to_search_for_importent_words) 
    .Cast<Match>() 
    .Select(m => m.Value) 
    .ToArray(); 
+0

@ "\。" C#の文字列が文字をエスケープする前に –

+0

@を実行すると\がそのまま書かれます。正規表現は\指定する必要があります。その期間はピリオドとみなされますが、「単一の文字」ではありません。 – Thor

+0

thx alot。偉大な意味を作った。正規表現でexscapeという言葉を理解することはなかった。 –

関連する問題