2011-05-14 2 views
7

У меня есть документы, которые прошли конвертацию OCR из PDF в HTML. Из-за этого они закончили с большим количеством случайных знаков пресетов unicode, где конвертер перепутался (т. Е. Elipses и т. Д.). Они также правильно имеют кучу неанглийских, но все же алфавитных символов, таких как é, и русских символов и т. Д.Есть ли способ сопоставить любой Unicode неалкогольный символ?

Есть ли способ сделать регулярное выражение, которое будет соответствовать любому символу алфавита Юникода (из алфавитов любой язык)? Или тот, который будет соответствовать только неалфавитам? Любой из них был бы очень полезным и удивительным. Я использую Perl, если это что-то меняет. Благодаря!

ответ

19

Проверьте свойства символа Юникода: http://www.regular-expressions.info/unicode.html#prop. Я думаю, что вы, вероятно,

\p{L} 

который будет соответствовать любым буквам или идеограммам. Вы также можете включить письма с отметками на них, так что вы могли бы сделать

\p{L}\p{M}* 

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

Редактировать: Вы также можете просмотреть этот ответ переполнения стека, обсуждая, соответствует ли \ w символам Unicode. Они предлагают, чтобы вы также могли использовать \ p {Word} или \ p {Alnum}: Does \w match all alphanumeric characters defined in the Unicode standard?

+2

Точно так же вы можете использовать '\ P' для соответствия символу * not *, имеющему определенное свойство (так что' \ P {L} 'соответствует любому небуквенному символу). –

+0

Могу ли я использовать код символа, пропускающий некоторые кодовые точки? Как \ p {P} опуская периоды и запятые? Отрицание этого было бы идеально для меня. – Eli

2

В зависимости от того, какой язык вы используете, механизм регулярных выражений может быть или не быть Unicode. Если это так, он может или не может знать маркеры свойств \p{}. Если да, то ваш ответ находится в Unicode Characters and Properties in Jan Goyvaerts' regex tutorial.

Вы можете использовать \p{Latin}, если поддерживается, чтобы обнаружить все, что есть (или нет, конечно) с языка, который использует любой из латинских блоков Unicode.

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