Альтернатива коду от @Cody:
Используя оператор модуля:
bool isEven = (a % 2) == 0;
я думаю, что это - незначительно лучший код, чем запись если/еще, потому что существует меньше дублирования & неиспользованная гибкость. Это действительно требует немного большей интеллектуальной мощи исследовать, но хорошее именование isEven
компенсирует.
Вы пробовали Ponyguruma , привязку Python к механизму регулярных выражений Oniguruma ? В этом движке вы можете просто сказать \ p {армянский}
, чтобы соответствовать армянским иероглифам. \ p {Ll}
или \ p {Zs}
тоже работают.
Вы правы, что классы свойств Unicode не поддерживаются парсером регулярных выражений Python.
Если вы хотите сделать хороший хак, который, как правило, был бы полезен, вы могли бы создать препроцессор, который сканирует строку для такого класса. токены ( \ p {M}
или что-то еще) и заменяет их соответствующими наборами символов, так что, например, \ p {M}
станет [\ u0300 - \ u036F \ u1DC0– \ u1DFF \ u20D0– \ u20FF \ uFE20– \ uFE2F]
, а \ P {M}
станет [^ \ u0300– \ u036F \ u1DC0– \ u1DFF \ u20D0– \ u20FF \ uFE20– \ uFE2F]
.
Люди будут вам благодарны. :)
Обратите внимание, что хотя \ p {Ll}
не имеет эквивалента в регулярных выражениях Python, \ p {Zs}
должен охватываться '(? u) \ s'
.
(? U)
, как говорится в документации, «Сделайте \ w, \ W, \ b, \ B, \ d, \ D, \ s и \ S зависимыми от базы данных свойств символов Unicode. ” а \ s
означает любой символ пробела.