2

使用: 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

4 に答える 4

2

Nokogiri を使用すると、テキストの周りに任意のマークアップを含めることができ、<br /> などで壊れます。

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

最初に、停止/質問/感嘆符の後の文には空白があり、それ以外の場合は大文字にならないため、ストリップを2回使用しました。次に、スペースを元に戻すために、各文の前にスペースを追加しました.2番目のストリップは、最終出力。

于 2011-10-05T06:33:34.233 に答える
1

Niklaosの回答から外れて、ピリオドを考慮し、レンダリングされたHTMLでスペースをそのまま維持するために少し改善しました。

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

編集:句読点文字を単一の文字クラスに追加し、スペースを維持するために空白の間にすべてキャプチャしました。ずっときれい。

于 2011-10-04T16:56:04.167 に答える
0

うーん、スーパー正規表現を呼び出す時が来たような気がします:)

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

それは仕事にすべきです。

注: これは、柔軟性を高めるために改善できます。

于 2011-10-04T16:36:36.753 に答える
0

capitalize は、探している方法です。ただし、文ごとに行う必要があります。必要に応じて nokogiri で簡単に解析できます

于 2011-10-04T16:12:11.630 に答える