Я создаю небольшую программу для очистки текста, и сейчас я тестирую ее в статьях 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.
Если вы хотите удалить квадратные скобки вместе с их содержимым, независимо от того, что это такое, выражение выглядит следующим образом:
@"\[[^\]]*\]"
Это означает, что "нужно совместить все, пока не дойдете до закрывающей скобки". Это более эффективно, чем точка с неохотным квалификатором .*?
потому что это позволяет избежать так называемого катастрофического возврата.
Используйте модификатор +
:
string refinedText = Regex.Replace(sourceText, @"\[[0-9]+\]", "");
Поскольку язык регулярных выражений - краткая справочная информация объясняет:
Соответствует предыдущему элементу один или несколько раз.
Чтобы удалить любые символы между скобками:
string refinedText = Regex.Replace("[0as9]", @"\[.+\]", "");
Или, если вы хотите также обработать случай "[]"
, затем измените +
на *
:
Соответствует предыдущему элементу ноль или более раз.
string refinedText = Regex.Replace("[0as9]", @"\[.*\]", "");
Попробуйте вот так:
string refinedText = Regex.Replace(sourceText, @"\[[0-9]+\]", "");
Также вы можете попробовать следующее:
var refinedText = Regex.Replace(sourceText, @" ?\[.*?\]", string.Empty);
Это приведет к удалению всего внутри текстового поля, включая символы и цифры
\[[^\[\]]+\]
или\[[^\]]*\]