2015-05-18 2 views
2

Я хочу совместить символы Юникода, используя регулярное выражение. Я нашел, что это возможно, используя Unicode Category or Block или, точнее, используя эти Unicode Categories и Supported Named Blocks.Как совместить символ Юникода, используя .net?

Проблема в том, что я не могу заставить ее работать, используя LINQPAD 4 и Regex.IsMatch функция. Например, пытаясь соответствовать простой латинский характер, как это:

Console.WriteLine(Regex.IsMatch("d", @"[\0000-\007F]+")); 

поднимает следующую ошибку:

ArgumentException4 parsing "[\0000-\007F]+" - [x-y] range in reverse order.

и с помощью этого:

Console.WriteLine(Regex.IsMatch("d", @"\L{IsBasicLatin}{1}")); 

дает мне:

parsing "\L{IsBasicLatin}{1}" - Unrecognized escape sequence \L.

В моем реальном случае я я собираюсь заменить IsLatin на IsCyrillic, но мне нужно заставить его работать с латынью, чтобы быть уверенным, что это OK.

Может ли кто-нибудь сказать, что я делаю неправильно?

+1

Я считаю, что вы используете неправильный символ эвакуации. Изучите руководство: https://msdn.microsoft.com/en-us/library/20bw873z%28v=vs.110%29.aspx. Персонаж, которого вы ищете, - \ p imo. – Santhos

+0

Все символы Unicode. Итак, в чем вопрос? _ –

ответ

5

Вы используете octal representation символов вместо шестнадцатеричное, и это создает недопустимый диапазон (потому что во-первых, \000 анализируется как восьмеричное характер, то 0-\007 встречается и вызывает ошибку, поскольку 0 имеет код в 32 decmal).

Использование \x или \u обозначения, например .:

[\x00-\x7F]+ 

Это будет захватить весь диапазон ASCII вместе с управляющими символами (вкл. Символ NULL).

И вторая проблема, вам нужно использовать \p с именем сценария, например.

\p{IsBasicLatin} 

Подробнее о Unicode categories here.

Смежные вопросы