Подстроки, в которых нет заданной строки

Рейтинг: 1Ответов: 1Опубликовано: 26.03.2011

Есть строка: stringA chars1 stringB stringA chars2 stringB

Нужно получить:
1) stringA chars1 StringB
2) StringA chars2 StringB

Если задаю шаблон:

string pattern = @"stringA[sw]+stringB";

То в результате выдает всю строку: stringA chars1 stringB stringA chars2 stringB
Как сделать шаблон, который берет все возможные строки, в которых нет, к примеру, строки stringA? Или есть какой-то иной подход для решения данной задачи?

Ответы

▲ 5Принят

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

В C# квантификаторы различаются на жадные и ленивые.

Жадные, например: *, +; ленивые, соответственно: *?, +?. Использование ленивого квантификатора как раз и приведёт к тому результату, который Вы желаете:

string pattern = @"stringA[\s\w]+?stringB";

Тут об этом написано подробнее: Кванторы.