Есть ли способ сопоставить любой не алфавитный символ Unicode? - PullRequest
11 голосов
/ 15 мая 2011

У меня есть несколько документов, которые были преобразованы из PDF в HTML. Из-за этого у них было много случайных знаков препинания в юникоде, где конвертер испортился (то есть, elipses и т. Д.). У них также правильно есть набор неанглийских, но все еще алфавитных символов, таких как é, и русских символов, и т.д ...

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

Ответы [ 2 ]

27 голосов
/ 15 мая 2011

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

\p{L}

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

\p{L}\p{M}*

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

Редактировать: Вы также можете посмотреть на этот ответ переполнения стека, чтобы обсудить, соответствует ли \ w символам Юникода.Они предполагают, что вы также можете использовать \ p {Word} или \ p {Alnum}: Соответствует ли \ w всем буквенно-цифровым символам, определенным в стандарте Unicode?

2 голосов
/ 15 мая 2011

В зависимости от того, какой язык вы используете, механизм регулярных выражений может или не может знать Unicode. Если это так, он может знать или не знать токены \p{} свойства. Если да, ваш ответ будет в Unicode-символах и свойствах в руководстве по регулярным выражениям Яна Гойваэрта .

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

...