所有大写到正常情况

时间:2011-05-19 23:37:18

标签: ruby string

我正试图找到一个关于如何转换这样的东西的优雅解决方案

  

所有大写的文字。 “为什么要使用它?”这是荒唐的! HELP。

......对于常规案例。我可以或多或少地找到所有句子起始字符:

(?<=^|(\. \"?)|(! ))[A-Z] #this regex sure should be more complex

但是(标准)Ruby既不允许使用lookbehinds,也不可能将.capitalize应用于gsub替换。我希望我能做到这一点:

"mytext".gsub(/my(regex)/, '\1'.capitalize)

但目前的工作解决方案是

"mytext".split(/\. /).each {|x| p x.capitalize } #but this solution sucks

1 个答案:

答案 0 :(得分:4)

首先,请注意您尝试做的只是近似值。

  1. 您无法正确判断句子边界的位置。您可以将其近似为整个字符串的开头,或者在句点,问号或感叹号后跟空格之后。但是,您将错误地将“经济”资本化为“美国经济”。

  2. 您无法正确判断哪些字词应该大写。例如,“John”将是“john”。

  3. 在许多情况下,您可能希望进行一些自然语言处理以获得接近正确的结果,但这些方法仅在概率上是正确的。你永远不会得到完美的结果。

    了解这些限制,您可能希望这样做:

    mytext.gsub(/.*?(?:[.?!]\s+|\z)/, &:capitalize)