Регулярное выражение для ловли букв за пределами a-z - PullRequest
10 голосов
/ 18 марта 2009

Обычное регулярное выражение, разрешающее только буквы, будет "[a-zA-Z]" , но я из Швеции, поэтому мне придется изменить это на "[a-zåäöA -ZÅÄÖ] ". Но предположим, что я не знаю, какие буквы используются в алфавите.

Есть ли способ автоматически узнать, какие символы действительны в данной локали / языке, или я должен просто составить черный список символов, которые, как мне кажется, я не хочу?

Ответы [ 6 ]

13 голосов
/ 18 марта 2009

Вы можете использовать \ pL для сопоставления с любой «буквой», которая будет поддерживать все буквы на всех языках. Вы можете сузить его до конкретных языков, используя «именованные блоки». Дополнительную информацию можно найти в документации Классы символов на MSDN.

Я бы порекомендовал поместить регулярное выражение (или, по крайней мере, часть «буквы») в локализованный ресурс, который затем можно извлечь из текущей локали и сформировать в больший шаблон.

3 голосов
/ 18 марта 2009

А как насчет \ p {name}?

Соответствует любому символу в именованном классе символов, указанном {name}. Поддерживаются имена Unicode-групп и диапазонов блоков. Например, Ll, Nd, Z, IsGreek, IsBoxDrawing.

Я не знаю достаточно о юникоде, но, возможно, ваши персонажи соответствуют классу юникода?

2 голосов
/ 18 марта 2009

См. категории символов выбор с \p и \w семантикой юникода.

0 голосов
/ 31 мая 2016

Это регулярное выражение допускает только действительные символы через:

[a-zA-ZÀ-ÿ ]
0 голосов
/ 18 марта 2009

Есть ли способ автоматически узнать, какие символы действительны в данной локали / языке, или я должен просто составить черный список символов, которые, как мне кажется, я не хочу?

Это не так, в общем , возможно.

В конце концов, текст на английском языке включает некоторые акцентированные символы (например, в "fête" и "naïve" - ​​которые в британском английском языке, чтобы быть строго правильными, все еще используют акценты) В некоторых языках некоторые стандартные буквы используются редко (например, y-diaeresis на французском языке).

Затем рассмотрите возможность включения иностранных слов (это часто бывает при использовании технических терминов). Цитаты были бы другим источником.

Если ваши требования достаточно узко определены, вы можете создать определение, но это требует лингвистического опыта на этом языке.

0 голосов
/ 18 марта 2009

Все символы являются «действительными», поэтому я думаю, что вы действительно запрашиваете символы, которые «обычно считаются буквами» в локали.

Спецификация Unicode имеет некоторые рекомендации, но в общем случае ответ «нет», вам необходимо перечислить символы, которые вы считаете «буквами».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...