使用类似[A-Z]([a-z] *)\ b的RegEx将“单词”更改为“单词”

时间:2014-11-22 01:48:00

标签: ruby regex

标题很好地总结了我的难题。我已经在网上搜索了一段时间,并且作为一个整体重新使用Ruby和正则表达式,我一直试图弄清楚如何使用RegEx&改变单个字符串的大小写#34;过滤器"例如[A-Z]([a-z]*)\b

基本上我希望流程

input: woRD
filter: [A-Z]([a-z]*)\b
output: Word

我已将单词过滤到列表中,因此我不需要匹配单词;我只需要使用RegEx过滤器来过滤单词的大小写。

我不想使用标准大写方法,我希望使用正则表达式来完成。

3 个答案:

答案 0 :(得分:1)

您可以使用

"woRD".downcase.capitalize

Ruby为这些类型的功能提供了一些预定义的方法。尝试使用它们而不是正则表达式。这节省了编码时间!

答案 1 :(得分:1)

好吧,出于某种原因你想使用正则表达式。你走了:

# prepare hashes for gsub
to_down = (to_upper = Hash[('a'..'z').zip('A'..'Z')]).invert

# convert to downcase
downcased = 'woRD'.gsub(/[A-Z]/, to_down)
# ⇛ 'word'

titlecased = downcased.gsub(/^\w/, to_upper)
# ⇒ 'Word'

希望它有所帮助。请注意String#gsub(re, hash)方法的用法。

答案 2 :(得分:0)

您无法根据需要使用Regex进行此类更改。 请仔细阅读以下主题:How to change case of letters in string using regex in Ruby

解决问题的最佳方法是使用:

"woRD".downcase.capitalize

name_of_your_variable.downcase!.capitalize!

如果要永久更改变量中的字符串而不需要将其分配给其他变量。