2013-02-10 2 views
-1

Я ищу, чтобы удалить все средние инициалы в серии имен. Я узнал, что могу сделать это с Python, поэтому решил, что я попробую его в Rruby. В Python я мог бы использовать команду endswith для удаления всех средних инициалов в файле csv , потому что они были единственными элементами, которые закончились символом '.'Ruby удалить слова, заканчивающиеся на '.'

пример

steve A. walkins 

michael todd 

Angel, Blair C. 

Не все имена следуют установленному шаблону, но все средние инициалы делают. Поэтому, чтобы научить себя рубину, пытающемуся найти эквилибриональную команду и использование в конечном итоге, я мог бы сделать в python.

Мой образец кода Python, который работал для этого, был.

print ' '.join(i for i in name.split(' ') if not i.endswith('.')) 
+0

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-end_with-3F –

+4

задавая вопросы, пожалуйста, потратьте немного времени чтобы исправить ваш вопрос и установить правильность капитализации и разметки. Это облегчает другим понимание и ответ. – berkes

ответ

3

Не притворяться мой ответ лучше, чем один из них предложил Ивайло Strandjev, но в случае, если вы хотите Oneliner, который является «перевод» вашего кода питона Рубину:

name.split.select{|t| !t.end_with?('.')}.join(' ') 

или даже яснее (спасибо @ ŁukaszNiemier)

name.split.reject{|t| t.end_with?('.')}.join(' ') 
+1

+1 На самом деле ваш ответ ** лучше :) Мне нравится использование 'join' вместо моего уродливого' inject'. –

+0

Спасибо, @ ŁukaszNiemier. Обновлено. – mudasobwa

+0

Спасибо, что мой сценарий работает очень высоко ценит вас, ребята! –

0

В рубине есть способ end_with?.

Вот несколько примеров кода рубин, чтобы делать то, что вы хотите:

def remove_initial name 
    names = name.split 
    names.select{|t| !t.end_with?(".")}.inject{|a,b| a + " " + b} 
end 

И короткий exaplanation:

Первая линия name.split просто разбивает имя с помощью пробелов по умолчанию разделитель.

names.select{|t| !t.end_with?(".")} будет фильтровать только имена, которые не заканчиваются ., а затем inject{|a,b| a + " " + b} будет накапливать оставшиеся имена, добавляя между ними одно пробел.

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