Почему Pattern.UNICODE_CHARACTER_CLASS прерывает сопоставление всего, прежде чем sla sh? - PullRequest
0 голосов
/ 22 апреля 2020

Регулярное выражение в вопросе

Я хочу разобрать текст для ингредиентов. В конце концов я придумал это регулярное выражение:

    static final Pattern pattern = Pattern.compile("\\b((?:[0-9]+\\.)?[0-9\\u00BC-\\u00BE\\u2150-\\u215E/]+)\\s?cup(?:s)?\\b");

Я думаю, что я вскоре объясню это, потому что я должен был разделить его. Но есть странное поведение, которое я не могу объяснить, поэтому я намеренно оставлю его таким.

Ради читабельности вы можете немного сократить его до этой формулы: 1010 * Идея состоит в том, чтобы искать строки типа «1/4 чашки», ¼ чашки, 2 чашки, 3,4 чашки и т. Д. c., Захватывая число только в группе. Число может включать в себя sla sh, может быть дробью Unicode (значения \\u) et c.

Unicode, разрывающей группы захвата

Теперь я хотел сопоставить «ЧАШКИ» тоже очевидно. Я добавил Pattern.CASE_INSENSITIVE. Пока я его добавлял, я добавил Pattern.MULTILINE | Pattern.UNICODE_CHARACTER_CLASS.

Последний будет ломать регулярное выражение для входных строк типа "1/4". Группа захвата будет содержать только «/4».


Вопрос:

Почему Pattern.UNICODE нарушает регулярное выражение? Я думаю, что этого не произойдет с python regex, , как можно увидеть на regex101.com .

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