2017-01-05 3 views
1

У меня есть строка переменной Рубиновый со значением 1.14.2.ab3-4.dl0.rhel Однако, я хочу, чтобы сбросить все после второго знака после запятой, так что я получаю значение, как 1.14Отбросив все в строковой переменной после второго знака после запятой

Я использую следующая команда: str.split(".")[0], но это не похоже на работу

ответ

2

Когда вы расщепляетесь . на вашей строке вы получаете:

['1', '14', '2', 'ab3-4', 'dl0', 'rhel'] 

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

str.split(".")[0..1].join(".") 

# or 
str.split(".").first(2).join(".") 
2

С регулярным выражением, вы можете просто посмотреть на первый номер с 2 десятичными знаками:

"1.14.2.ab3-4.dl0.rhel"[/\d+\.\d{2}/] 
#=> "1.14" 
1

@ ответа работает только maxple в когда интересующая подстрока находится в начале строки. Поскольку это не было частью спецификации (только в примере), я не думаю, что это разумное предположение. (@ Eric не делал этого предположения.)

Существует также двусмысленность в отношении вашего утверждения: «Отбросьте все после второй десятичной дроби». @maxple интерпретирует это как после второй десятичной точки (но также отбрасывает вторую десятичную точку), тогда как @Eric предположил, что это означает после второй десятичной цифры. Это то, что происходит, когда вопросы неточны.

Если подстрока находится в начале строки, и вы хотите отбросить вторую десятичную точку и все после этого, вот два способа сделать это.

str = "1.14.2.ab3-4.dl0.rhel" 

1. Изменение @ регулярных выражений Эрика:

str[/\A\d+\.\d+/] 
    #=> "1.14" 

2. Преобразовать строку в число с плавающей точкой, а затем обратно в строку:

str.to_f.to_s 
    #=> "1.14" 

# 1 возвращает nil, если искомая подстрока не существует, w здесь # 2 возврат "0.0". До тех пор, пока "0.0" не является допустимой подстрокой, либо можно использовать, чтобы определить, существует ли подстрока, а если это так, верните подстроку.

0

Вы также можете использовать метод разделительных строк: https://ruby-doc.org/core-2.2.0/String.html#method-i-partition

"1.14.2.ab3-4.dl0.rhel".partition(/\d+\.\d{2}/)[1] 
=> "1.14" 
+0

Учитывая, что регулярные выражения совпадают, что является преимуществом использования 'Строка # partition' над использованием Эриком из' Струнных # [] ' ? –

+0

Я не верю, что есть какие-то преимущества, это еще один способ добиться того же результата. – rii

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