11

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

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

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

4

3 回答 3

12

我找不到任何花哨的方法来做到这一点。

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)

此代码输出是Here You Have A Long List Of Words%w*可以更改为%w+不替换一个字母的单词。


更高级的解决方案:

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

由于 lua 的模式系统很简单,因此不可能进行真正的单正则表达式替换。

于 2013-11-29T11:43:58.993 回答
1

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

str = string.gsub(" "..str, "%W%l", string.upper):sub(2) 将每个撇号后的第一个字母大写,无论它是否是单词中的第一个字母

例如:“here's a long list of words”输出“Here's A Long List Of Words”

为了解决这个问题,我在这里找到了一个聪明的解决方案

利用此代码:

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

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

将修复由那个奇怪的错误引起的任何问题

于 2014-03-21T01:51:16.977 回答
0
function titleCase( first, rest )
   return first:upper()..rest:lower()
end

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

BunchOfText {"Yeppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp"}
于 2014-09-13T18:32:02.253 回答