Про "regex" сам еще не до конца понимаю. Каждый раз вчитываюсь в справку. Про "RegExMatch" и "RegExReplace" читай в английской справке.
Вот "костыльный" вариант, как смог - так и написал:
str=
(
.
Ла лала ла л ал. Лаалала лал лалала?
Бу буб убббубуб ббу! Лалал бу, блал бла.
)
while (str!="")
{
Pos:=RegExMatch(str,"(.*[\.\?!\R])(.*[\.\?!\R])",var)
if !pos
break
arr%a_index%:=regexreplace(var2,"\R")
str:=var1
count:=a_index
; tooltip,% var1 "`n`n" var2 "`n" Pos
}
loop,% count
msgbox,% arr%a_index%
Random,N,1,%count%
msgbox,% "Случайное:`n" N "/" count "`n`n" arr%N%
Присутствует два "бага": это точка в начале и обратная последовательность предложений.
Что касается сокращений в тексте: нужно составлять список сокращений и заменять в них точки на "спецсимволы", затем восстанавливать в точки.