Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Регулярное выражение для поиска слов на украинском языке [дубликат]

#c_sharp #регулярные_выражения


        
             
                
                    
                        
                            This question already has answers here:
                            
                        
                    
                
                        
                            Как описать все символы некоторого языка в регулярном
выражении? Есть ли готовые решения?
                                
                                    (3 ответа)
                                
                        
                                Закрыт 4 года назад.
            
                    
Есть следующее регулярное выражение:

Regex regex = new Regex("^[А-Яа-я]+$");


Он работает правильно, но не "понимает" украинский язык. Т.е. он "скушает" "фывапролдж",
а это нет - "іилрилії".

Как сделать так, чтобы эта регулярка "понимала" украинский язык?
    


Ответы

Ответ 1



Вам необходимо дополнить символьный класс символами ёЁЇїІіЄєҐґ: "^[А-Яа-яёЁЇїІіЄєҐґ]+$" Это регулярное выражение для букв украинского языка (информацию я брал из Википедии): [а-щА-ЩЬьЮюЯяЇїІіЄєҐґ] Возможно, надо добавить сюда ' (см. комментарий Влада). По поводу ёЁ: эти буквы в таблице Юникода находятся вне диапазона остальный букв, поэтому её надо указывать отдельно. Диапазон заглавных букв русского языка выглядит как U+0410 - U+042F, диапазон строчных - U+0430 - U+044F. Ё имеет код U+0401, а ё — U+0451. И ещё: в .NET можно указать все кириллические символы с помощью \p{IsCyrillic} (U+0400 - U+04FF) и, для полноты, \p{IsCyrillicSupplement} (U+0500 - 052F), и тогда выражение примет форму @"^[\p{IsCyrillic}\p{IsCyrillicSupplement}]+$" Ну, или @"^['\p{IsCyrillic}\p{IsCyrillicSupplement}]+$".

Ответ 2



Я бы рекомендовал такое выражене: Regex regex = new Regex("^[\u0400-\u052F\u2DE0-\u2DFF\uA640-\uA69F']+$"); Это понимает все кириллические буквы в Юникоде, например такие буквы: РусскийЫыЁёЭэЪъ УкраїнськаІіЇїЄє' БеларускаяЎў СрпскиЂђЉљЊњЋћЏџ СлавянскиеБуквыѰѱѬѭѨѩ и так далее. Если только хочешь украинские и русские буквы, вот это подходит: new Regex("^[А-Яа-яЁёЇїІіЄєҐґ']+$");

Комментариев нет:

Отправить комментарий