Как я могу проверить, существует ли слово в строке, и вернуть false, если его нет, в ruby? - PullRequest
11 голосов
/ 04 апреля 2011

Скажите, что у меня есть строка str = "Things to do: eat and sleep."

Как я могу проверить, существует ли "do: " в str, без учета регистра?

Ответы [ 5 ]

20 голосов
/ 04 апреля 2011

Вот так:

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

Но мне не очень нравятся двойные отрицания ...

4 голосов
/ 04 апреля 2011

В ruby ​​1.9 вы можете сделать так:

str.downcase.match("do: ") do   
  puts "yes" 
end

Это не совсем то, что вы просили, но я заметил комментарий к другому ответу.Если вы не возражаете против использования регулярных выражений при сопоставлении строки, возможно, существует способ пропустить часть нижнего регистра, чтобы получить нечувствительность к регистру.

Подробнее см. String # match

3 голосов
/ 04 апреля 2011

Вы также можете сделать это:

str.downcase.include? "Some string".downcase
2 голосов
/ 04 апреля 2011

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

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, если нет попадания, он работает и в условных выражениях.

0 голосов
/ 04 апреля 2011
"Things to do: eat and sleep.".index(/do: /i)

index возвращает позицию, с которой начинается матч, или ноль, если не найден

Подробнее о методе индекса вы можете узнать здесь: http://ruby -doc.org / ядро ​​/ классов / String.html

Или о регулярном выражении здесь: http://www.regular -expressions.info / ruby.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...