Используя Nokogiri, вы можете иметь любую разметку вокруг текста, и она разбивается на
и т. Д.
ng = Nokogiri::HTML.fragment("<p>hello, how are you? oh, that's nice! i am glad you are fine. i am too.<br />i am glad to have met you.</p>")
ng.traverse{|n| (n.content = n.content.gsub(/(.*?)([\.|\!|\?])/) { " #{$1.strip.capitalize}#{$2}" }.strip) if n.text?}
ng.to_s
дает:
"<p>Hello, how are you? Oh, that's nice! I am glad you are fine. I am too.<br>I am glad to have met you.</p>"
Я использовал полосу дважды, сначала потому, что в предложении после остановки / вопроса / восклицания будет пробел, а не заглавные буквы, затем, чтобы вернуть интервал, я добавил пробел перед каждым предложением - вторая полоса удаляет сгенерированное пространство в начало финального вывода.