Мне нужно разбить текст на предложения. у меня есть шаблон
(?<=[.!?]|[.!?]['"])(?=\p{javaWhitespace}*\p{javaUpperCase}).
Но он разбивает предложение типа Max (v. Village) - programmer. на два предложения Max (v. и Village) - programmer., но я ожидал одно предложение. Слишком много примеров:
I am Max. I am 19. -> I am Max., _I am 19
She likes him(Dr. Web). Abc. -> She likes him(Dr. Web)., _Abc.
не She likes him(Dr., _Web)., _Abc..
Я попытался завершить регулярное выражение для проверки последовательности скобок, но не смог.
Можете ли вы добавить еще несколько образцов текста, который вы собираетесь разделить на предложения с ожидаемым и фактическим результатом? Я вижу, что вы не хотите отделять свое предложение от точки, находящейся внутри круглых скобок, но дополнительные данные помогут укрепить ваше регулярное выражение.
Я не совсем понимаю проблему здесь, если это работает, вы также можете использовать docs.oracle.com/javase/6/docs/api/java/lang/… Split с ограничением
Просто напишите синтаксический анализатор и избегайте регулярных выражений для этого, со временем будет намного проще расширять и улучшать алгоритм распознавания предложений.
Вы просто хотите сохранить текст внутри круглых скобок вместе? Или это тоже приговор-My name is Dr. Web.?
@plalx, вы правы, но это хороший пример для изучения специальных конструкций Pattern.
@rustyx ваш пример продвинут. Мне полезно разделить его на два предложения. Я хочу правильно разделить предложения скобками.
Итак, какой алгоритм вам нужен? Разделить по знакам препинания, если только они не заключены в круглые скобки, квадратные скобки или кавычки?
В базовом случае, если вы хотите проверять скобки в регулярном выражении, вам нужно экранировать его, используя "(" Возможно, вам придется использовать "\(" в зависимости от вашего языка, поскольку сам обратный слеш также должен быть экранирован, чтобы быть распознанным как литерал персонаж.
@plalx да. Мне интересно, как это сделать с шаблоном хотя бы для предложений с одинарными скобками
@AlvinMax: Почему у вас есть подчеркивание перед вторым предложением? Это сделано намеренно и они вам действительно нужны, или достаточно просто разделить предложение?
@PushpeshKumarRajwanshi Я не хочу терять пробелы. Это работа с моей выкройкой. Мне очень нужно решить проблему с скобками.
@AlvinMax: при разделении, если вы разделите по нулевой ширине, вы ничего не потеряете. Но это приведет к появлению дополнительного пробела перед вторым предложением, что может быть нежелательно. Поэтому, если вы хотите избавиться от этого лишнего пространства, разделение может быть выполнено с использованием пробелов, которые соответствуют вашему регулярному выражению. Позвольте мне опубликовать ответ, и там вы можете сообщить мне, если вам нужно, чтобы я что-то еще изменил.




Каков ваш ожидаемый результат?