Удалить «[]» и все, что происходит внутри строки

1

Я создаю небольшую программу для очистки текста, и сейчас я тестирую ее в статьях Wiki, и я пытаюсь эффективно удалить "[2]", "[14]", "[nb 6]" и т.д.

У меня есть этот код, который почти выполняет эту работу, но он кажется очень длинным, и я чувствую, что должен быть способ сделать это в одной строке, но я новичок в Regex и не могу понять. Кроме того, я читал смешанные мнения о Regex, поэтому, если это отличный вариант, это было бы здорово.

В любом случае, вот мой текущий код:

string  refinedText = Regex.Replace(sourceText, @"\[[0-9]\]", "");

        refinedText = Regex.Replace(refinedText, @"\[[0-9]", "");
        refinedText = Regex.Replace(refinedText, @"\[[a-z]", "");
        refinedText = Regex.Replace(refinedText, @"[0-9]\]", "");

Проблема в том, что в "[]] есть 2 номера, и я не знаю, как сказать ему, чтобы удалить оба, так как" 0-9 "просто удаляет первый номер, я могу сделать замену в 2 части для них; но для экземпляров "[nb 3]" b всегда остается, так как я не могу указать одиночный "b" после того, как "[]" исчезнут для использования в качестве ссылки. Также "[nb 14]", то же самое, если есть две цифры после "nb".

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

-Thanks.

  • 0
    ? \[[^\[\]]+\] или \[[^\]]*\]
Теги:
string
replace

3 ответа

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

Если вы хотите удалить квадратные скобки вместе с их содержимым, независимо от того, что это такое, выражение выглядит следующим образом:

@"\[[^\]]*\]"

Это означает, что "нужно совместить все, пока не дойдете до закрывающей скобки". Это более эффективно, чем точка с неохотным квалификатором .*? потому что это позволяет избежать так называемого катастрофического возврата.

  • 0
    Большое спасибо, я знал, что это будет просто, я видел ^ использованный в других примерах, но не был полностью уверен в его функции.
0

Используйте модификатор +:

string refinedText = Regex.Replace(sourceText, @"\[[0-9]+\]", "");

Поскольку язык регулярных выражений - краткая справочная информация объясняет:

Соответствует предыдущему элементу один или несколько раз.

Чтобы удалить любые символы между скобками:

string refinedText = Regex.Replace("[0as9]", @"\[.+\]", "");

Или, если вы хотите также обработать случай "[]", затем измените + на *:

Соответствует предыдущему элементу ноль или более раз.

string refinedText = Regex.Replace("[0as9]", @"\[.*\]", "");
0

Попробуйте вот так:

string  refinedText = Regex.Replace(sourceText, @"\[[0-9]+\]", "");

Также вы можете попробовать следующее:

var refinedText = Regex.Replace(sourceText, @" ?\[.*?\]", string.Empty);

REGEX DEMO

Это приведет к удалению всего внутри текстового поля, включая символы и цифры

Ещё вопросы

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