2016-09-28 11 views
0

Ich suche nicht, wie man eine Schnur innerhalb einer anderen Schnur findet. Ich suche ein Wort. So sollte die Lösung diese Tests bestehen:Wie überprüft man, ob ein Satz ein bestimmtes Wort enthält?

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

Haben Sie schon einmal etwas versucht? – code11

+3

Sie suchen tatsächlich nach einer Zeichenkette innerhalb einer Zeichenkette, aber mit den zusätzlichen Bedingungen a) Groß- und Kleinschreibung und b) ohne umgebende Buchstaben. –

Antwort

4

Sie benötigen einen regulären Ausdruck mit einem Wortgrenzen \b um den Wert, den Sie die Präsenz Überprüfung auf:

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

Die \bare\b Matches jeder are, die ein Ganzes Wort (nicht vorangestellt oder gefolgt von Buchstaben/Ziffern/Unterstrichen. Das Flag (?i) gewährleistet eine Groß- und Kleinschreibung. Siehe the regex demo.

Siehe this SO answer, damit der Code überprüft, ob ein Muster mit einer Zeichenfolge übereinstimmt.

Weitere Informationen darüber, was \b Wortgrenze tut, finden Sie unter regular-expressions.info Word boundaries.

+0

Nur zur Info: Wenn Sie nur 'Are' oder' Are' als ganze Wörter abgleichen wollen, aber ARe' oder 'ARE' oder' aRe' nicht erkennen wollen, verwenden Sie * alternation *: 'let pattern = "\\ b (?: sind | Are) \\ b" ' –

Verwandte Themen