Как полностью игнорировать строку и вкладку в RegEx?
Есть ли способ полностью игнорировать разрывы строк и символы табуляции и т.д. в RegEx? Например, символы разрыва строки и табуляции могут быть найдены где угодно и в любом порядке в строке содержимого.
... [CustomToken \t \r\n Type="User" \t \r\n Property="FirstName" \n /] ... [CT ...
Это регулярное выражение, которое я использую в настоящее время:
(\[CustomToken).*?(\/\])
.NET API
Regex.Matches(string input, string pattern)
Спасибо за ваше предложение.
Ответы
Ответ 1
Если вы хотите, чтобы это регулярное выражение соответствовало этому вводу, все, что вам нужно сделать, это указать режим Singleline:
Regex.Matches(input, @"\[CustomToken).*?(/\])", RegexOptions.Singleline);
Метафактор точки обычно соответствует любому символу, кроме строки (\n
). Режим Singleline, также известный как режим "dot-matches-all" или "DOTALL", позволяет ему также соответствовать линиям.
Ответ 2
Невозможно "игнорировать" любого типа символа с регулярным выражением. Вы можете игнорировать регистр букв, но об этом.
Лучше всего использовать \s+
, где вы ожидаете некоторый тип пробелов. Класс \s
будет соответствовать любому пробелу, включая символы новой строки, возврат каретки, вкладки и пробелы, и это заставит ваш шаблон регулярного выражения выглядеть намного приятнее.
Ответ 3
Вам нужна вкладка/новая линия? Вы всегда можете просто заменить символ tab/newline пустым символом, чтобы удалить их.
string mystring = "\t\nhi\t\n";
string mystring_notabs = mystring.Replace("\t",""); //remove tabs
mystring = mystring_notabs.Replace("\n",""); //remove newline and copy back to original
Ответ 4
У меня возникла проблема с многострочным значением XML. Мне нужны данные в поле описания, и я не хотел менять свой код на С#, чтобы использовать параметр одной строки, поскольку я динамически читал регулярные выражения из базы данных для синтаксического анализа. Это решило мою проблему, особенно (? S) на фронте:
(?s)(?<=<description>).*(?=<\/description>)