Я знаю, что знаю, есть много похожих вопросов, и я могу сказать, что я прочитал их все. Но я не очень хорошо разбираюсь в регулярном выражении, и я не мог понять, какое регулярное выражение мне нужно.Java - регулярное выражение для разделения токенов с минимальным размером и разделителями
Я хочу, чтобы разбить строку в Java, и у меня есть 4 ограничения:
- Разделители являются (конец предложения)
- Десятичные числа не должны быть лексического [.?!]
- Разделители не следует удалять.
- Минимальный размер каждого маркера должно быть 5
Например, для ввода:
"Hello World! This answer worth $1.45 in U.S. dollar. Thank you."
Выходной сигнал будет:
[Hello World!, This answer worth $1.45 in U.S. dollar., Thank you.]
До сих пор Я получил ответ для трех первых ограничений этого регулярного выражения:
text.split("(?<=[.!?])(?<!\\d)(?!\\d)");
И я знаю, что должен использовать {5,}
где-то в моем регулярном выражении, но любая комбинация, которую я пробовал, не работает.
Для таких случаев, как: "I love U.S. How about you?"
Не имеет значения, дает ли оно мне одно или два предложения, поскольку оно не делает токенизацию S.
в виде отдельной фразы.
И, наконец, знакомство с хорошим руководством по регулярному выражению оценивается.
UPDATE: Как Chris упоминалось в комментариях, практически невозможно решить такие вопросы, как это (чтобы охватить все случаи происходят в естественных языках) с регулярным выражением. Однако я нашел ответ Хамза в шкафу и самый полезный.
Итак, будьте осторожны! Принятый ответ не будет охватывать все возможные варианты использования!
Мы уверены, что в конце каждого предложения есть пробел? – Juto
И что произойдет, если предложение короче 5 символов, т. Е. «Эй!»? – Juto
@ Juto Это может быть. В этом примере есть пробелы, но не во всех случаях. –