Rails:在某些字符串后大写字符

使用:Rails 3.0.3。

我有一个字符串可以看作这个:

hello, how are you? oh, that's nice! i am glad you are fine. i am too.
i am glad to have met you.

我希望每个角色都跟随

! ?

! ? 。 资本化。 基本上使上面的字符串看起来不错。

是否有标准function? 我该怎么办?

PS。 试图加粗有问题的人物,但它没有奏效……

关闭Niklaos的答案,我稍微改进了一下,以考虑周期并在渲染的HTML中保持间距不变。

 str.gsub(/(\|\
|[?!.])([\s]*)([[:alpha:]]{1})/) {"#{$1}#{$2}#{$3.capitalize}"}

编辑:在单个字符类中添加标点字符,在空格之间捕获所有字符以保留间距。 更清洁。

使用Nokogiri,您可以在文本周围添加任何标记,并在
等处打破。

 ng = Nokogiri::HTML.fragment("

hello, how are you? oh, that's nice! i am glad you are fine. i am too.
i am glad to have met you.

") ng.traverse{|n| (n.content = n.content.gsub(/(.*?)([\.|\!|\?])/) { " #{$1.strip.capitalize}#{$2}" }.strip) if n.text?} ng.to_s

给出:

 "

Hello, how are you? Oh, that's nice! I am glad you are fine. I am too.
I am glad to have met you.

"

我使用了条带两次,首先是因为停止/问题/感叹之后的句子将有空格而不是大写,否则然后将间距放回去我在每个句子之前添加一个空格 – 第二个条带在开始时删除生成的空格最终输出。

大写是你正在寻找的方法。 虽然你必须为每个句子做。 如果你必须的话,你可以用nokogiri轻松解析它

嗯我觉得是时候打电话给超级正则表达:)

 str.gsub(/(\|\
|! |\? )(.{1})/) {"#{$1}#{$2.capitalize}"}

这应该是工作。

注意:这可以改进以获得更大的灵活性。