Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
LastPast
32 / 32 / 2
Регистрация: 06.07.2010
Сообщений: 129
1

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

17.01.2012, 15:41. Просмотров 1612. Ответов 6
Метки нет (Все метки)

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

C#
1
2
3
4
5
6
7
8
9
10
11
string pattern = @"begin[\s\S]+end";
string text = "111begin222end333begin444end555";
 
RegexOptions options = RegexOptions.IgnoreCase;
Regex newReg = new Regex(pattern, options);
MatchCollection matches1 = newReg.Matches(text);
 
foreach (Match m in matches1)
{
    Console.WriteLine(m.Value);
}
Следующий код выдает результат:
begin222end333begin444end
Как переделать шаблон, чтобы выдавалось такое:
222
444
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2012, 15:41
Ответы с готовыми решениями:

Регулярные выражения, поиск файлов
Уже создавал подобную тему, но все-таки нужно довести вопрос до конца. Есть файлы с именем в...

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

Регулярные выражения: поиск и замена
К примеру у меня есть строка "like(sadadadsa) asdsad and ( 1=1) like(sadadadsa)" и есть такая...

Регулярные выражения поиск значений
Всем доброго времени. впервые столкнулся с регулярками и нужна помощь специалистов. дана строка:...

6
Караман
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
17.01.2012, 16:12 2
Сталкивался с такой проблемой когда парсил контент сайта.
Решается просто, вместо Match используй MatchCollection.
0
I2um1
Злой няш
1450 / 1137 / 381
Регистрация: 05.04.2010
Сообщений: 1,979
17.01.2012, 16:19 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Text.RegularExpressions;
 
class Program
{
    static void Main()
    {
        string pattern = @"begin([\s\S]+?)end";
        string text = "111begin222end333begin444end555";
 
        RegexOptions options = RegexOptions.IgnoreCase;
        Regex newReg = new Regex(pattern, options);
        MatchCollection matches1 = newReg.Matches(text);
 
        foreach (Match m in matches1)
        {
            Console.WriteLine(m.Groups[1].Value);
        }
    }
}
2
LastPast
32 / 32 / 2
Регистрация: 06.07.2010
Сообщений: 129
17.01.2012, 20:08  [ТС] 4
Цитата Сообщение от Караман Посмотреть сообщение
Сталкивался с такой проблемой когда парсил контент сайта.
Решается просто, вместо Match используй MatchCollection.
Не понял вас.
У меня она и используется.
0
turbanoff
Эксперт Java
4055 / 3790 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
18.01.2012, 12:25 5
пример Blood-Angel верный, только поменяйте регулярку на
C#
1
string pattern = @"begin(.+?)end";
0
LastPast
32 / 32 / 2
Регистрация: 06.07.2010
Сообщений: 129
23.01.2012, 08:53  [ТС] 6
Цитата Сообщение от turbanoff Посмотреть сообщение
пример Blood-Angel верный, только поменяйте регулярку на
C#
1
string pattern = @"begin(.+?)end";
В этом случае неправильно обрабатываются строки с символом новой строки.
Такая входная строка:
C#
1
"111begin22\n2end333begin444end555"
выдаст лишь
444
1
turbanoff
Эксперт Java
4055 / 3790 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
23.01.2012, 08:58 7
Цитата Сообщение от LastPast Посмотреть сообщение
В этом случае неправильно обрабатываются строки с символом новой строки.
Такая входная строка:
C#
1
"111begin22\n2end333begin444end555"
выдаст лишь
444
Верное замечание. С точкой нужно поменять опции поиска:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Text.RegularExpressions;
 
class Program
{
    static void Main()
    {
        string pattern = @"begin(.+?)end";
        string text = "111begin22\n2end333begin444end555";
 
        RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline;
        Regex newReg = new Regex(pattern, options);
        MatchCollection matches1 = newReg.Matches(text);
 
        foreach (Match m in matches1)
        {
            Console.WriteLine(m.Groups[1].Value);
        }
    }
}
1
23.01.2012, 08:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2012, 08:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Регулярные выражения - поиск в html
Добрый день. Есть html документ. Как выбрать часть текста? Допустим: Текст находится посредине....

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

Регулярные выражения и поиск русской буквы
Код должен искать, есть ли в файле строка начинающаяся с букв Т (рус. и англ.). Обязательно с...

Поиск заглавных букв (регулярные выражения)
Добрый день! Мне нужно найти в строке все слова, начинающиеся с прописной буквы. Решил сделать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.