将Lua中每个单词的首字母大写

时间:2013-11-29 11:18:12

标签: lua lua-patterns

我可以使用以下方法将字符串的第一个字母大写:

str:gsub("^%l", string.upper)

如何修改它以大写字符串中每个单词的第一个字母?

3 个答案:

答案 0 :(得分:10)

我无法找到任何奇特的方法来做到这一点。

str = "here you have a long list of words"
str = str:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end)
print(str)

此代码输出这里有一长串单词%w*可以更改为%w+,不能替换一个字母的单词。


Fancier解决方案:

str = string.gsub(" "..str, "%W%l", string.upper):sub(2)

由于lua的模式系统很简单,因此无法替换真正的单正则表达式。

答案 1 :(得分:0)

在列出的替代答案中,使用包含撇号的单词会得到不一致的结果:

str = string.gsub(" "..str, "%W%l", string.upper):sub(2) 如果它是单词

中的第一个字母,则会将每个撇号后的第一个字母大写

例如:“这里有一长串单词”输出“这里有一长串单词”

要解决此问题,我找到了clever solution here

使用此代码:

function titleCase( first, rest )
   return first:upper()..rest:lower()
end

string.gsub(str, "(%a)([%w_']*)", titleCase)

将解决由这个奇怪的错误引起的任何问题

答案 2 :(得分:0)

function titleCase( first, rest )
   return first:upper()..rest:lower()
end

string.gsub(str, "(%a)([%w_']*)", titleCase)

BunchOfText {"Yeppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp"}