如何解决普通情况下全部大写
| 我正在尝试找到一种优雅的解决方案,例如如何转换这样的内容 所有大写文本。 \“为什么有人会使用它?\”这太荒谬了!救命。 ...在正常情况下我或多或少会找到所有带有以下内容的开头的字符:(?<=^|(\\. \\\"?)|(! ))[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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。