Как полностью игнорировать строку и вкладку в 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>)