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

时间:2011-10-04 16:01:32

标签: ruby-on-rails ruby string character capitalize

使用:Rails 3.0.3。

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

<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>

我希望每个角色都跟随<p> <br /> ! ?。资本化。基本上使上面的字符串看起来很好。

是否有标准功能?我该怎么办?

PS。试图加粗有问题的人物,但它没有用......

4 个答案:

答案 0 :(得分:2)

使用Nokogiri,您可以在文本周围添加任何标记,并在&lt; br /&gt;上中断。等

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>"

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

capitalize是您正在寻找的方法。虽然你必须为每个句子做。如果你不得不使用nokogiri,你可以很容易地解析它

答案 3 :(得分:0)

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

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

这应该是工作。

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