Я пытаюсь написать регулярное выражение, которое берет строку символа и строит их в выражение как диапазон. Я использую Regex.Escape (.net 3.5) для дезинфекции этих строк, чтобы не осталось никаких контрольных символов. Но кажется, что метод Escape работает не так, как ожидалось, и не сможет избежать закрытия }
или ]
символов. Разве это не ускользает от них? Вот пример того, что я делаю:.Net Regex.Escape работает неправильно?
string test = @"sdfz346gv][)(}{><";
string pattern = "[" + Regex.Escape(test) + "]+";
string input = "ffff{444}g";
if (Regex.IsMatch(input, pattern))
{
Console.WriteLine("Matched");
}
else
{
Console.WriteLine("Not Matched");
}
Строка pattern
, кажется, имеет значение [sdfz346gv]\[\)\(}\{><]+
и не будет соответствовать ffff{444}g
, но, насколько я понимаю это должно выглядеть следующим образом [sdfz346gv\]\[\)\(\}\{><]+
который является выражением который выполняет по-другому и будет соответствовать ffff{444}g
. Я мог бы просто заменить }
и ]
персонажами с \}
и \]
, но есть ли другие символы, которые не могут быть экранированы этим методом эвакуации? Могу ли я на это положиться?
Я не хочу, чтобы он избежал последнего символа ']', я хочу, чтобы он избежал предпоследнего. В противном случае он изменяет значение выражения. - Извините, я вижу, что вы имеете в виду (опечатка в вопросе, исправлена), но проблема все еще остается. – JonM
Затем отредактируйте свой вопрос. Вы четко говорите: «Насколько мне известно, это должно выглядеть так: [sdfz346gv] \ [\) \ (\} \ {><\] +' ", что ускользает от последнего'] '. want is '[sdfz346gv \] \ [\) \ (\} \ {><] +' –
Мы просто не встречаем друг друга :) – JonM