Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 29.04.2015
Сообщений: 8
1

Составить регулярное выражение, ищущее в тексте повторяющиеся слова

29.04.2015, 18:28. Показов 9347. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Устал себя мучать, поэтому решился спросить. Необходимо составить регулярное выражение, ищущее в тексте повторяющиеся слова. Эти слова могут быть разными, т.е. в последовательности: "<текст> Слово <текст> Слово1 <текст> Слово <текст> Слово1" будет найдено 4 слова. Длина у слов может быть произвольная, в общем - мало чего регулярного.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2015, 18:28
Ответы с готовыми решениями:

Составить регулярное выражение для комментариев в тексте
Необходимо регулярное выражение для комментариев в тексте вида /*asd*/ также /**/(пустые) и /*...

Регулярное выражение. Как найти нужное вхождение слова в тексте если их несколько?
Как найти нужное вхождение слова в тексте если их несколько ? Допустим есть текст &quot;купил виски.....

Регулярное выражение, которое бы искало в тексте слово определенной длинны
Мне необходимо построить регулярное выражение, которое бы искало в тексте слово определенной...

Подскажите регулярное выражение для поиска только вопросительных предложений в тексте
Здравствуйте. Кому не сложно подскажите регулярное выражение для поиска только вопросительных...

8
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
29.04.2015, 21:11 2
А в строке "сосед семён срубил сосну" сколько? Или вот "колючая колбаса" за одинаковые считать? Или надо искать однокоренные?
0
0 / 0 / 0
Регистрация: 29.04.2015
Сообщений: 8
29.04.2015, 21:22  [ТС] 3
Просто одинаковые слова(человек - человек), и не обязательно все одинаковы между собой.
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
29.04.2015, 21:33 4
А, то есть в строке "дом двор арбуз дом двор" будет 4?
0
0 / 0 / 0
Регистрация: 29.04.2015
Сообщений: 8
29.04.2015, 21:38  [ТС] 5
Именно так.
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
29.04.2015, 22:49 6
Ну и последний вопрос обязательно регулярками?

Добавлено через 12 минут
Так подойдет?
C#
1
2
3
4
5
6
7
8
           string text = "дом двор арбуз дом двор";
            string wordPattern = @"([[^\wА-Яа-я]+)";
            var matches = Regex.Matches(text, wordPattern); //разбиваем текст на слова
            var words = matches.Cast<Match>().Select(n => n).ToArray(); //преобразуем в массив строк
            var count = words.GroupBy(n => n) //группируем одинаковые слова
                .Where(g=> g.Count() > 1)     //выбираем группы с количеством одинаковых слов больше 1
                .Sum(g => g.Count());         //суммируем количество слов в группах
            Console.WriteLine(count);
1
0 / 0 / 0
Регистрация: 29.04.2015
Сообщений: 8
30.04.2015, 14:38  [ТС] 7
Обязательно. Без них я и сам бы. Ваш код разбивает строку на слова и заполняет массив Match, но счётчик всегда показывает ноль. И такой вот вопрос - через вашу реализацию можно как-нибудь получать индекс вхождения именно повторяющихся слов, а не всех?
0
1150 / 742 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
30.04.2015, 21:13 8
Поправил ошибку и добавил индексы.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            string text = "Дом двор арбуз дом двор двор";
            string wordPattern = @"([[^\wА-Яа-я]+)";
            var matches = Regex.Matches(text, wordPattern); //разбиваем текст на слова
 
            var words = matches.Cast<Match>().Select((word, index) => new { word, index }).ToArray(); //преобразуем в массив объектов {match, index}
            var indexes = words.GroupBy(n => n.word.Value.ToLower()) //группируем одинаковые слова игнорируя регистр
                .Where(g => g.Count() > 1)                          //выбираем группы с количеством одинаковых слов больше 1
                .SelectMany(n => n.Select(a => a.index));           //получаем позиции повторяющихся слов
 
            Console.WriteLine("Найдено повторяющихся слов: " + indexes.Count());
            Console.Write("Позиции слов: ");
            foreach (var index in indexes)
            {
                Console.Write(index + " ");
            }
            Console.ReadKey();
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
30.04.2015, 22:02 9
Noobys,
C#
1
2
3
4
5
6
7
8
        string input = "People people hola hola reader hole good hole day";
        string regex = @"(\w+\b)(?!.*\1\b)";
 
        Console.WriteLine ("Уникальные слова в строке\n{0}\n", input);
        foreach (Match match in Regex.Matches (input, regex)) 
        {
            Console.WriteLine (match.Value);
        }
Lexeq,
У вас по сути используется регулярка только для разделения слов
0
30.04.2015, 22:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2015, 22:02
Помогаю со студенческими работами здесь

Составить регулярное выражение
Здравствуйте, помогите пожалуйста написать регулярку чтобы она делала следующее: есть массив...

Составить регулярное выражение
Есть текст: size=5.33 2фв&gt;6 фыф33&gt;отв. Избитая поисковая фраза: Regex r = new...

Составить регулярное выражение
Добрый день! Есть массив строк телефонных номеров. Не могу придумать правильные регулярки к нему....

Составить регулярное выражение
Уважаемые специалисты. Помогите с регулярным выражением. Составил такую регулярку, она находит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru