2012-05-11 3 views
1
<%= @contact.foo_help %> 

Выводит номер id и заголовок (с пробелом между ними), например: 29292 Это название. Я просто хочу номер. Это не всегда будет то же самое количество цифр, и я безрассудно использую числа в своих заголовках.Ruby удалить все после первого пробела

Я думал, что самым простым способом было бы gsub все после первого пространства, но я два слабых в этой структуре и не могу получить синхронизацию правильно! Пожалуйста, помогите

<%= @contact.foo_help.gsub(\s ' ') %> 
+0

Вы используете Rails или просто Ruby? –

+0

'аргументы gsub'а должны быть разделены запятыми, а первый аргумент должен быть строкой или регулярным выражением. Если вы хотите использовать последнее, вы должны использовать литерал регулярного выражения ('/ \ s /'). Я знаю, что вы новичок в языке, но это базовые вещи из когда-либо, или документации. –

ответ

6
@contact.foo_help.gsub(/\s.+/, '') 

Будет соответствовать пробелу, сопровождаемому одним или несколькими символами, и заменить пустой строкой.

Rubular замечательно для такого рода вещи http://rubular.com/

5

Я думаю, что самый простой/чистый вещь будет использовать String#[] с регулярными выражениями аргумента:

<%= @contact.foo_help[/\d+/] %> 

Например:

>> '29292 This Is A Title.'[/\d+/] 
=> "29292" 
>> '29292 This 9999 Is A Title.'[/\d+/] 
=> "29292" 

Вы также мог бы затянуть его вверх бит и привязать регулярное выражение в начале строки:

<%= @contact.foo_help[/\A\d+/] %> 

, но я не знаю, нужен ли вам дополнительный шум.

Основная идея состоит в том, чтобы сказать, что вы имеете в виду («дайте мне число в начале строки, и я знаю, что это начнется с числа») вместо того, чтобы хватать то, чего вы не хотите, и выбросить.

4

Попробуйте

str = "29292 This Is A Title" 
number = str.to_i 
=> 29292 
number.class 
=> Fixnum 

'29292 555 This Is A Title 8989'.to_i 
=> 29292 

Надеется, что это поможет вам.

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