2013-09-17 2 views
0

У меня есть строка, как это:

 THiS is a Li?ne of text 
    !THiS is a Line of text  
((THiS is a Line of text.X  
    THiS is a Line of text 

Я хочу, чтобы заработать каждую строку, но сохранить его в первоначальном виде.

До сих пор у меня есть:

puts the_string.gsub(/(^\W*?)([a-z])/) { |x| "#{$2.capitalize}"} 

но избавляется от пробела.

+1

В этом случае '' {$ 2.capitalize} и '$ 2.capitalize' - это одно и то же. Котировки не требуются. – tadman

+2

Просьба привести примеры желаемого вывода. – AGS

ответ

0

Не уверен, что именно вы пытаетесь достичь, но это может помочь:

puts the_string.gsub(/(^\W*?)([a-z])/) { |x| "#{$1}#{$2.capitalize}"} 

Это также ставит первый (т.е. пробелы) обратно в строку результата.

+1

Нежелательный оператор '?' Является избыточным. '\ W' не будет распространяться на' [a-z] ', потому что они являются исключительными. – sawa

0

Вы не имеем дело с остальной частью слова:

lines = [ 
    " THiS is a Li?ne of text", 
    "!THiS is a Line of text", 
    "((THiS is a Line of text.X", 
    "THiS is a Line of text" 
] 

lines.each do |line| 
    puts line.gsub(/(\w+)/) { $1.capitalize } 
end 

# => This Is A Li?Ne Of Text 
# => !This Is A Line Of Text  
# => ((This Is A Line Of Text.X  
# => This Is A Line Of Text 
0
string = <<_ 
     THiS is a Li?ne of text 
    !THiS is a Line of text  
((THiS is a Line of text.X  
    THiS is a Line of text 
_ 

string.gsub(/\w.*/, &:capitalize) 
# => 
#  This is a li?ne of text 
# !This is a line of text  
#((This is a line of text.x  
# This is a line of text 
Смежные вопросы