Я строю регулярное выражение, которое ищет даты. Я хотел бы вернуть найденную дату и предложение, в котором она была найдена. В приведенном ниже коде строки по обе стороны от date_string должны проверять условия предложения. Ради вас, я опустил регулярное выражение для date_string - достаточно сказать, что он работает для выбора дат. Хотя внутренняя часть date_string не важна, она сгруппирована как одно целое регулярное выражение.
"((?:[^.|?|!]*)"+date_string+"(?:[^.|?|!]*[.|?|!]\s*))"
Проблема в том, что date_string соответствует только последнему номеру любой заданной даты, возможно потому, что регулярное выражение перед date_string совпадает слишком далеко и выходит за пределы регулярного выражения даты. Например, если я скажу «День независимости - 4 июля», я получу предложение и 4, хотя оно должно совпадать с «4 июля». Если вам интересно, мои регулярные выражения внутри date_string упорядочены таким образом, что «4 июля» должно совпадать первым. Есть ли способ сделать все это в одном регулярном выражении? Или мне нужно как-то разбить его (т.е. разбить весь текст на предложения, а затем проверить каждое предложение)?