2014-01-16 3 views
2

Используя язык Ruby, я хотел бы использовать первую букву каждого предложения, а также избавиться от любого пространства до периода в конце каждого предложения. Ничто другое не должно измениться.Ruby - использовать первую букву каждого предложения в абзаце

Input = "this is the First Sentence . this is the Second Sentence ."  
Output = "This is the First Sentence. This is the Second Sentence." 

Спасибо всем.

+0

Как вы определяете «период в конце каждого предложения»? Например, какой из периодов в этой строке «в конце предложения»: «Символ» часто используется в объектно-ориентированных языках. Вы можете сказать, что Dog.bark или Cat.meow и даже в очень извращенный язык, Корова (название метода - это пространство здесь.) Или вы не можете ... ох, перестань на меня напасть ». – sameers

ответ

5

Используя регулярное выражение (String#gsub):

Input = "this is the First Sentence . this is the Second Sentence ."  
Input.gsub(/[a-z][^.?!]*/) { |match| match[0].upcase + match[1..-1].rstrip } 
# => "This is the First Sentence. This is the Second Sentence." 

Input.gsub(/([a-z])([^.?!]*)/) { $1.upcase + $2.rstrip } # Using capturing group 
# => "This is the First Sentence. This is the Second Sentence." 

Я предположил setence заканчивается ., ?, !.

UPDATE

input = "TESTest me is agreat. testme 5 is awesome" 
input.gsub(/([a-z])((?:[^.?!]|\.(?=[a-z]))*)/i) { $1.upcase + $2.rstrip } 
# => "TESTest me is agreat. Testme 5 is awesome" 

input = "I'm headed to stackoverflow.com" 
input.gsub(/([a-z])((?:[^.?!]|\.(?=[a-z]))*)/i) { $1.upcase + $2.rstrip } 
# => "I'm headed to stackoverflow.com" 
+0

@roytoy хочет избавиться от любого пространства до периода в конце каждого предложения. –

+0

@Pinepara, Спасибо за комментарий. Мне изменен код. – falsetru

+0

Хорошее решение, возможно, вы захотите заменить '([^.?!] +)' With '([^.?!] *)'? Подумайте о вводе: «i. Robot». –

1
Input.split('.').map(&:strip).map { |s| 
    s[0].upcase + s[1..-1] + '.' 
}.join(' ') 
=> "This is the First Sentence. This is the Second Sentence." 

Мой второй подход является более чистым, но производит несколько иной вывод:

Input.split('.').map(&:strip).map(&:capitalize).join('. ') + '.' 
=> "This is the first sentence. This is the second sentence." 

я не уверен, что если вы хорошо с ним.

+0

Как насчет предложений, которые заканчиваются на?,!? – ram

+0

Не беспокоитесь о предложениях, оканчивающихся на? или ! – roytony

+0

@ram После тщательного изучения вопроса, я думаю, он должен быть в порядке, считая, что каждое предложение заканчивается периодом. –

Смежные вопросы