【问题标题】:Rails: Capitalize characters after certain stringRails:某些字符串后的字符大写
【发布时间】:2011-11-30 20:00:48
【问题描述】:

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

我希望每个字符都跟随 &lt;p&gt; &lt;br /&gt; ! ? 中的任何一个。要大写。基本上让上面的字符串看起来不错。

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

ps。尝试将有问题的字符加粗,但没有用...

【问题讨论】:

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


    【解决方案1】:

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

    我使用了两次 strip,首先是因为 stop/question/exclamation 之后的句子会有空格,否则不会大写,然后为了放回空格,我在每个句子之前添加了一个空格 - 第二个 strip 删除了生成的空格最终输出的开始。

    【讨论】:

    • Mark:自从我尝试了 Lester 的第一个功能后,我就再也没有尝试过这个功能,而且它奏效了。但是,非常感谢您在这个问题上提供的帮助。看来你贡献了一样多。谢谢!!!
    • 哈哈,5 年后用谷歌搜索了同样的东西,再次尝试了第一个解决方案,然后又继续使用这个解决方案,并且很高兴看到它有效。想写评论,却发现我实际上在 5 年前就这样做了,并写了一个评论,就像那个:)
    【解决方案2】:

    离开 Niklaos 的回答,我稍微改进了它以考虑句点并在呈现的 HTML 中保持间距不变。

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

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

    【讨论】:

      【解决方案3】:

      capitalize 是您正在寻找的方法。尽管您必须为每个句子都这样做。如果需要,您可以使用 nokogiri 轻松解析它

      【讨论】:

      • 可以使用 Nokogiri 在这个字符串中查找什么是“句子”吗?它可以做到:“if after ! then capitalize”...?
      【解决方案4】:

      嗯,我觉得是时候调用超级正则表达式了:)

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

      这应该是工作。

      注意:这可以改进以具有更大的灵活性。

      【讨论】:

        猜你喜欢
        • 2015-06-01
        • 2019-12-24
        • 1970-01-01
        • 2017-05-16
        • 1970-01-01
        • 2018-10-21
        • 2017-11-05
        • 2017-05-17
        • 2022-11-05
        相关资源
        最近更新 更多