Python regex соответствие свойствам Unicode

Альтернатива коду от @Cody:

Используя оператор модуля:

bool isEven = (a % 2) == 0;

я думаю, что это - незначительно лучший код, чем запись если/еще, потому что существует меньше дублирования & неиспользованная гибкость. Это действительно требует немного большей интеллектуальной мощи исследовать, но хорошее именование isEven компенсирует.

55
задан tchrist 29 March 2012 в 05:42
поделиться

3 ответа

Вы пробовали Ponyguruma , привязку Python к механизму регулярных выражений Oniguruma ? В этом движке вы можете просто сказать \ p {армянский} , чтобы соответствовать армянским иероглифам. \ p {Ll} или \ p {Zs} тоже работают.

23
ответ дан 7 November 2019 в 07:21
поделиться

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

Если вы хотите сделать хороший хак, который, как правило, был бы полезен, вы могли бы создать препроцессор, который сканирует строку для такого класса. токены ( \ p {M} или что-то еще) и заменяет их соответствующими наборами символов, так что, например, \ p {M} станет [\ u0300 - \ u036F \ u1DC0– \ u1DFF \ u20D0– \ u20FF \ uFE20– \ uFE2F] , а \ P {M} станет [^ \ u0300– \ u036F \ u1DC0– \ u1DFF \ u20D0– \ u20FF \ uFE20– \ uFE2F] .

Люди будут вам благодарны. :)

4
ответ дан 7 November 2019 в 07:21
поделиться

Обратите внимание, что хотя \ p {Ll} не имеет эквивалента в регулярных выражениях Python, \ p {Zs} должен охватываться '(? u) \ s' . (? U) , как говорится в документации, «Сделайте \ w, \ W, \ b, \ B, \ d, \ D, \ s и \ S зависимыми от базы данных свойств символов Unicode. ” а \ s означает любой символ пробела.

2
ответ дан 7 November 2019 в 07:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: