Подсчет общего числа элементов из массива строк в тексте - PullRequest
1 голос
/ 24 мая 2019

у меня есть

public static string[] words = {"word1","word2","word3"};

Я хочу посчитать вхождения слова1 + вхождения слова2 + вхождения слова3 в строку.

Я пытался

Regex.Matches(string, "word1").Count 

, который отлично работает для одного слова, но я не знаю, как искать все строки. Я не хочу использовать foreach, потому что массив "words" может содержать до 25 строк. Спасибо.

Ответы [ 3 ]

3 голосов
/ 25 мая 2019

Это более универсальный способ сделать это.
Regex дает вам больше контроля над контекстом слов, которые он находит.
И, я полагаю, это намного быстрее, так как все это делается водин выстрел
без множества манипуляций примитивами.

string[] words = { "word1", "word2", "word3" };
Regex rx = new Regex(   @"(?is)(?:.*?\b(" + string.Join("|", words) +   @")\b)+");

string strin = "There are some word3 and more words and word1 and more word3, again word1";

Match m = rx.Match( strin );
if ( m.Success )
    Console.WriteLine("Found {0} words", m.Groups[1].Captures.Count);

Вывод

Found 4 words


В приведенном выше регулярном выражении используется граница слова \b.
Альтернативный выбор границы: пробел (?<!\S) (?!\S)

1 голос
/ 25 мая 2019

Вы можете использовать System.Linq, чтобы получить Sum из Count всех Matches, выполнив что-то вроде:

private static void Main()
{
    var words = new[] {"dog", "coyote", "fox"};

    var input = "The quick brown fox jumps over the lazy dog";

    var wordCount = words.Sum(word => Regex.Matches(input, word).Count);

    // wordCount = 2
}
0 голосов
/ 25 мая 2019

Ваш лучший, возможно, единственный вариант - это цикл, который перебирает список слов.

Мои предпочтения примерно такие:

int intTotalWordCount=0;

for (int intJ=0;intJ<words.Length;intJ++)
{
    intTotalWordCount+=Regex.Matches(string, words[intJ]).Count;
}

Console.WriteLine (@"Final word count = {0}",intTotalWordCount;

Конечно, вы тоже можетеоберните вышеупомянутый блок внутри метода, в качестве возвращаемого значения которого используется intTotalWordCount.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...