Regex для удаления символов, но не иностранных символов в Ruby - PullRequest
1 голос
/ 09 февраля 2010

Есть ли у кого-нибудь хорошее регулярное выражение для удаления всех символов (';., _ \ $ @!% Возврата каретки и т. Д.) Из строки без повреждения каких-либо посторонних символов (é 多 فا и т. Д.)? Полагаю, не-регулярные выражения были бы даже лучше, но я не вижу никаких методов Ruby или Rails, которые бы это делали.

Ответы [ 2 ]

4 голосов
/ 09 февраля 2010

Что такое символ? Это похоже на нечеткое требование. Является ли & символом, хотя это просто сокращение от слова «и»? Является ! символ, хотя он используется в качестве буквенного символа в транслитерации некоторых африканских языков? Если $ является символом, значит ли это, что 円 также? Я думаю, что ответ на этот вопрос будет иметь большое значение для предложения курса действий.

Я думаю, что самое близкое, что вы можете получить с помощью регулярного выражения, - /[^\w\s]/. Движок Regexp в Ruby 1.9 предназначен для того, чтобы понимать иностранные языки достаточно хорошо, чтобы правильно знать, какие слова являются «словесными» символами, так что это оставит те и пробелы. В моих тестах это правильно удаляет пунктуацию из английских, японских и немецких предложений, оставляя окружающие символы. Но от долларов до пончиков будут крайние случаи, которые приводят в движение практически любое решение - иметь дело с огромным разнообразием языков в мире (некоторые из которых даже не имеют слов , как мы их знаем) - это невероятно сложное задание.

3 голосов
/ 09 февраля 2010

Хороший способ сделать это - использовать новые (ish) классы символов Unicode в регулярном выражении, такие как \P{L}, чтобы соответствовать чему-либо, что не буква (на любом языке) в соответствии с юникода. К сожалению, похоже, что Ruby не поддерживает это, даже в 1.9.

Возможно, синтаксический анализатор регулярных выражений 1.9 достаточно умен, чтобы не совпадать с байтами, которые составляют специальные символы в символах Юникода, поэтому простое перечисление всех символов для удаления может работать. Это предполагает, что вы действительно можете перечислить все символы, которые вы хотите отфильтровать, что может быть намного больше, чем символы в ASCII, например, логическое нет, самолет и т.д ...

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