Переведите это, если утверждение в регулярное выражение - PullRequest
1 голос
/ 28 июня 2011

Мне пришлось перевести следующее выражение if в регулярное выражение, чтобы мы могли использовать его для всей строки

if (buffer[i] < 32 && !(buffer[i] == '\t' || buffer[i] == '\r' || buffer[i] == '\n'))
    buffer[i] = ' ';

Что я и сделал, выполнив это

return Regex.Replace(base.ReadLine(), "[\0-\x08\x0B\x0C\x0E-\x1F]", " ");

Однако яне нравится, как это выглядит, есть ли в регулярном выражении способ сделать то же самое, что я сделал в операторе if?В основном

[\0-\x1f]~[\t\r\b]

Куда бы пошла ~ вещь, которая представляет «исключить следующее» (это не обязательно должен быть такой точный синтаксис, мне просто интересно, есть ли что-то подобное?)

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Если вам не нравится внешний вид вашего регулярного выражения, вы можете использовать что-то вроде /(?![\t\r\n])[\x00-\x1F]/.Первая часть, (?![\t\r\n]), говорит о сбое, если следующий символ соответствует [\t\r\n], а затем вторая часть [\x00-\x1F] говорит, что соответствует любому символу <= 0x1F. </p>

1 голос
/ 28 июня 2011

Взгляните здесь - это говорит об отрицаниях регулярных выражений.Я не уверен, может ли это помочь вам напрямую, но это лучшее, что у меня есть.

0 голосов
/ 28 июня 2011

Чтобы отрицать что-либо, используйте [ ^ \ t \ r \ b].Вы также можете попробовать отрицательный взгляд за , но первый вариант проще ИМХО.

...