2016-09-28 6 views
0

Я не ищу, как найти строку внутри другой строки. Я ищу слово. Таким образом, решение должно пройти эти тесты:Как проверить, содержит ли предложение определенное слово?

let result: Bool = senx.contains(word: "are") 

let sen1 = "We are good." //true 
let sen2 = "We care about you." //false 
let sen3 = "are" //true 
let sen4 = "are." //true 
let sen5 = "Are." //true 
let sen6 = "I have a flare." //false 
+0

Вы что-то пробовали? – code11

+3

Фактически вы ищете строку внутри строки, но с добавленными условиями: a) нечувствительность к регистру и b) без каких-либо окружающих букв. –

ответ

4

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

let pattern = "(?i)\\bare\\b" 
if string.rangeOfString(pattern, options: .RegularExpressionSearch) != nil ... 

The \bare\b спичек любой are, который в целом (не предшествуют и не сопровождаются буквами/цифрами/символами подчеркивания. Флаг (?i) обеспечивает поиск без учета регистра. См. the regex demo.

См. this SO answer для кода, чтобы проверить, соответствует ли шаблон строке.

См. regular-expressions.info Word boundaries для получения дополнительной информации о том, что \b слово граница.

+0

Just FYI: Если вы хотите только совместить 'Are' или' are' как целые слова, но вы не хотите определять 'ARe' или' ARE' или 'aRe' и т. Д. Использовать * alternation *:' let pattern = "\\ b (?: are | Are) \\ b" ' –

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