Регулярное выражение в вопросе
Я хочу разобрать текст для ингредиентов. В конце концов я придумал это регулярное выражение:
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 .