普通情况下全部大写

问题描述

| 我正在尝试找到一种优雅的解决方案,例如如何转换这样的内容   所有大写文本。 \“为什么有人会使用它?\”这太荒谬了!救命。 ...在正常情况下我或多或少会找到所有带有以下内容的开头的字符:
(?<=^|(\\. \\\"?)|(! ))[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)
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...