удаление текста между CLOSEST-разделителями в строке - регулярное выражение

1

Я пытаюсь использовать регулярное выражение, чтобы избавиться от строк между конкретными символами, например "[" и "]":

input = "There is a [blue] cloud on top of that [big] elephant";
desiredOut = "There is a cloud on top of that elephant"; // this is what i want

Но если я использую регулярное выражение для замены того, что находится между "[" и "]", я удаляю все между первым и последним из этих символов:

string input = "There is a [blue] cloud on top of that [big] elephant";
string regex = "(\\[.*\\])" ;
string actualOut = Regex.Replace(input, regex, "");

actualOut = "There is a elephant" // this is what i get

Любые подсказки о том, как удалить материал между промежуточными разделителями? Благодарю.

Теги:

4 ответа

2
Лучший ответ

Эта небольшая модификация должна решить вашу проблему:

string regex = "\\[(.*?)\\]";

Этот бит (.*?) Будет соответствовать всем, но займет как можно меньше.

  • 0
    Спасибо чувак! это сделало трюк.
0

Причина, по которой ваше регулярное выражение удаляет все между первым [ и последним ] состоит в том, что по умолчанию модификаторы являются жадными, т.е. они соответствуют как можно большему количеству букв.

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

string regex = @"\[[^\]]*\]"

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

0
var input = "There is a (blue) cloud on top of that(big) elephant";
var output = Regex.Replace(input, @" ?\(.*?\)", string.Empty);

это сделает работу

  • 0
    Пожалуйста, добавьте некоторые объяснения.
0

Чтобы удалить также ведущее или конечное пространство, вы можете использовать это

string actualOut = Regex.Replace(input, @"^\[[^\]]*\]\s+|\s+\[[^\]]*\]", ""); 

DEMO

Ещё вопросы

Сообщество Overcoder
Наверх
Меню