2017-01-11 5 views
0

У меня есть список linq с "impportent words", который содержит предложения и отдельные слова.regex найти точное слово/предложения соответствие

мне нужно найти, если есть какие-либо слова или фразы из importent_words, который находится в "sentence_to_search_for_importent_word"

наконец результат должен закончиться в массиве или что-то.

вот что я не сделал, пока знаю ..

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, кажется, найти возраст, но это только выход "this" вместо "this is"

Похоже, проблема в том, что «это» больше, чем одно слово.

+5

Вы ищете 'importent_words.Where (x => предложение.Contains (x))'? почему регулярное выражение? – Sayse

+0

Я бы согласился, что с использованием регулярного выражения вводит вторую проблему, вы не ищете шаблон, поэтому базовая проверка будет в десять раз лучше. –

+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

Что делает @ "\." do –

+0

@ перед тем, как строка в C# ускользает от символов, поэтому \ будет записана как есть. Regex необходимо указать \. так что период считается периодом, но не «ни одним персонажем». – Thor

+0

thx alot. сделал большой смысл. никогда не понимал термин exscape раньше в регулярном выражении. –

Смежные вопросы