Заглавная буква каждого слова в Lua

Я могу использовать первую букву моей строки, используя:

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

Как я могу изменить это, чтобы сделать заглавной первую букву каждого слова в строке?

3 ответов


Я не смог найти любой другой способ сделать это.

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 проста.


в альтернативном ответе вы получаете несогласованные результаты со словами, содержащими апострофы:

str = string.gsub(" "..str, "%W%l", string.upper):sub(2) будет заглавная первая буква после каждого Апострофа независимо от того, если его первая буква в слове

например: "вот длинный список слов "выходы" вот длинный список слов"

чтобы исправить это, я нашел умное решение здесь

используя этот код:

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

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

исправит любые проблемы, вызванные этим странным жуком


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

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

BunchOfText {"Yeppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp"}