Как я могу проверить, существует ли слово в строке и вернуть false, если это не так, в ruby?
Скажем, у меня есть строка str = "Things to do: eat and sleep."
Как я могу проверить, существует ли "do: "
в str, нечувствительный к регистру?
Ответы
Ответ 1
Вот так:
puts "yes" if str =~ /do:/i
Чтобы вернуть логическое значение (предположительно из метода), сравните результат совпадения с nil
:
def has_do(str)
(str =~ /do:/i) != nil
end
Или, если вам не нравится != nil
, вы можете использовать !~
вместо =~
и отрицать результат:
def has_do(str)
not str !~ /do:/i
end
Но мне не нравятся двойные отрицания...
Ответ 2
В ruby 1.9 вы можете сделать следующее:
str.downcase.match("do: ") do
puts "yes"
end
Это не совсем то, что вы просили, но я заметил комментарий к другому ответу. Если вы не возражаете использовать регулярные выражения при сопоставлении строки, возможно, есть способ пропустить нижнюю часть, чтобы получить нечувствительность к регистру.
Для получения дополнительной информации см. соответствие строки #
Ответ 3
Вы также можете сделать это:
str.downcase.include? "Some string".downcase
Ответ 4
Если все, что я ищу, это совпадение с подстрокой case = indensitive, которое я обычно использую:
str.downcase['do: ']
9 раз из 10 Мне все равно, где в строке есть совпадение, так что это красиво и лаконично.
Вот как это выглядит в IRB:
>> str = "Things to do: eat and sleep." #=> "Things to do: eat and sleep."
>> str.downcase['do: '] #=> "do: "
>> str.downcase['foobar'] #=> nil
Поскольку он возвращает nil
, если нет ударов, он также работает в условных выражениях.
Ответ 5
"Things to do: eat and sleep.".index(/do: /i)
index возвращает позицию, в которой начинается совпадение, или nil, если не найден
Подробнее о методе индекса вы можете узнать здесь:
http://ruby-doc.org/core/classes/String.html
Или о regex здесь:
http://www.regular-expressions.info/ruby.html