Вы можете добавить отрицательный прогноз (?!.*?\d{2}:\d{2}:\d{2}\s*[AP]M)
после сопоставления с первой датой:
^\d+\s+\d{2}/\d{2}/\d{4}\s+\d{2}/\d{2}/\d{4}(?!.*?\d{2}:\d{2}:\d{2}\s*[AP]M).*?(?=(\d+\s*\d{2}/\d{2}/\d{4}\s+\d{2}/\d{2}/\d{4})|$)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
См. Демоверсию regex .
Предварительный просмотр полностью провалит совпадение, если после первой даты и любых 0+ символов, как можно меньше, найдется временная подстрока, соответствующая шаблону \d{2}:\d{2}:\d{2}\s*[AP]M
.
Я также добавил начало строки / строки ^
якоря, заменил все [0-9]
на \d
(короче), [\/]
на /
(регулярные выражения в Java не используют разделители регулярных выражений, следовательно, нет вам нужно экранировать /
, который не является специальным метасимволом регулярных выражений), уменьшить (AM|PM)
до [AP]M
, чтобы уменьшить накладные расходы на группировку, и заменить \Z
на $
, но если вы имели в виду конец строки, а не строку, Вы можете использовать свой \Z
якорь.
Обратите внимание, что в Java вам потребуется экранировать каждый обратный слеш в приведенной выше строке.