问题描述
|
我正在尝试找到一种优雅的解决方案,例如如何转换这样的内容
所有大写文本。 \“为什么有人会使用它?\”这太荒谬了!救命。
...在正常情况下我或多或少会找到所有带有以下内容的开头的字符:
(?<=^|(\\. \\\"?)|(! ))[A-Z] #this regex sure should be more complex
但是(标准)Ruby不允许回溯,也无法将.capitalize应用于gsub替换。我希望我可以这样做:
\"mytext\".gsub(/my(regex)/,\'\\1\'.capitalize)
但目前可行的解决方案是
\"mytext\".split(/\\. /).each {|x| p x.capitalize } #but this solution sucks
解决方法
首先,请注意,您要尝试做的只是一个近似值。
您无法正确判断句子的边界在哪里。您可以将其近似为整个字符串的开头,也可以在句号,问号或感叹号之后紧跟空格之后。但是,然后,您将在“美国经济”中错误地将“经济”大写。
您无法正确判断哪些单词应大写。例如,\“ John \”将为\“ john \”。
在许多情况下,您可能需要进行一些自然语言处理才能获得接近正确的结果,但是这些方法仅是概率正确的。您将永远不会获得完美的结果。
了解这些限制后,您可能需要执行以下操作:
mytext.gsub(/.*?(?:[.?!]\\s+|\\z)/,&:capitalize)