0 / 0 / 0
Регистрация: 06.06.2014
Сообщений: 16
1

Извлечение предложений из строки с использованием регулярных выражений

10.12.2014, 01:28. Показов 1040. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Промаялся весь вечер, облазил весь msdn, уже не знаю что делать.
В общем, нужно разбить строку на предложения. Шаблон, написанный мною, находит первое предложение и походу просто забивает на строку дальше, хотя должен бы искать дальше. Текст может быть абсолютно любой, он считывается из блокнота. Очень на помощь, а то весь замаялся уже. Либо буду рад, если сможете предложить другой адекватный способ решения задачи. Просто перебирать посимвольно строку до первой точки можно, но глупо. Разве что как единственный вариант тут. У нас один парень уже так хотел сдать: ему преподаватель устроил разнос, мол, если это лог чего-нибудь, то такой способ тупо не справится. Пишется под консоль. Return добавлен чтобы дебажить шаблон, я очень долго пытался.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Text.RegularExpressions;
 
    class SearchInFile
    {
        public static List<string> CreateStream(string FilePath)
        {
            StreamReader IncomingFile = new StreamReader(FilePath, Encoding.Unicode);            
            string line;
            string pattern = @".+\.\s*\b";
            List<string> ListText = new List<string>();
            while ((line = IncomingFile.ReadLine()) != null)
            {                
                foreach (Match sentence in Regex.Matches(line, pattern, RegexOptions.IgnoreCase))
                {
                    ListText.Add(sentence.Value);
                }
            }           
            return new List<string>();
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2014, 01:28
Ответы с готовыми решениями:

Бегущая строка с использованием регулярных выражений
Необходимо доработать программу с использованием регулярных выражений. using System; using...

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

Переделать программу вычисления с использованием регулярных выражений
Здравствуйте! Возможно ли переделать код моей программы, которая считает значение Y, но чтобы в ней...

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

2
307 / 284 / 102
Регистрация: 06.05.2014
Сообщений: 861
10.12.2014, 16:44 2
Модификатор "плюс" - жадный по своей сущности, он выбирает один или более символов, но всегда как можно больше. Поэтому если у тебя в строке (line) будет не одно, а два и более предложений, то "плюс" выберет всё до последней точки.
Как вариант, можно подставить такой шаблон: @".+?[.!?]"
Ещё можно банально Split'еть line по трём символам - точка, вопросительный и восклицательный знак: line.Split(new Char [] {'.', '!', '?'});
1
0 / 0 / 0
Регистрация: 06.06.2014
Сообщений: 16
10.12.2014, 20:30  [ТС] 3
BozKurt, спасибо. У меня как-то пока как-то наоборот выходит, он берёт пока только до первой точки, а всё остальное в MatchCollection не заносит. Хотя, когда я тестировал этот шаблон на каком-то сайте, где в риал тайме подсвечивались, подходящие части текста, там он мог так сделать.
А в твоём варианте как выходит? Любой символ, встречающийся 1 или более раз, встречающийся 0 или 1 раз. Как-то противоречиво, но потестим сейчас. А да теперь вспомнил, что было такое, ладно пусть будет на крайний случай.

Добавлено через 38 минут
Цитата Сообщение от BozKurt Посмотреть сообщение
Модификатор "плюс" - жадный по своей сущности, он выбирает один или более символов, но всегда как можно больше. Поэтому если у тебя в строке (line) будет не одно, а два и более предложений, то "плюс" выберет всё до последней точки.
Как вариант, можно подставить такой шаблон: @".+?[.!?]"
Ещё можно банально Split'еть line по трём символам - точка, вопросительный и восклицательный знак: line.Split(new Char [] {'.', '!', '?'});
Жесть, я не знаю как, но этот паттерн работает именно, так как надо. Спасибо большое! А то сколько бы я с ней ещё сидел.
0
10.12.2014, 20:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2014, 20:30
Помогаю со студенческими работами здесь

Проверка правильности введенных дат с использованием регулярных выражений
Напишите программу с использованием регулярных выражений, выполняющую проверкуправильности...

Написать программу с использованием регулярных выражений, выполняющую проверку правильности номера телефона
Написать программу с использованием регулярных выражений, выполняющую проверку правильности номера...

Проверка строки с пом. регулярных выражений
Необходимо чтобы программа определяла верно ли введено выражение вида Ax+By+Cz. Кофициенты должны...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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