2016-12-20 12 views
0

フリー・テキスト文字列を使用して配列内の項目を検索しようとしています。私はこれまでのところ、以下のコードを見てきましたが、部分的にしか一致しない結果を返しています。配列内の値に基づいて文字列内の完全一致を検索する

var townArray = ["Leamington Spa", "Birmingham", "Coventry", "Leamington Hastings", "Royal Leamington Spa", "Lea", "Leam", "Cove"] 

let searchText = "Anyone want to meet in Leamington Spa or Coventry" 

var resultsArray = [String]() 

for i in townArray { 
    let range = searchText.lowercased().range(of: i.lowercased(), options: .regularExpression) 
    // (8 times) 
    if range != nil { 
    let found = searchText.substring(with: range!) 
    print(found) 
    resultsArray.append(found) 
    // (5 times)} 
} 
print(resultsArray) 
// ["Leamington Spa", "Coventry", "Lea", "Leam", "Cove"] 
+0

あなたは何を期待していますか?町の配列にはその部分文字列が含まれています。この特定の場合、正規表現オプションは冗長です。 – vadian

+0

"Leamington Spa"と "Coventry"は、 "Leam"、 "Lea"、 "Cove"以外のsearchTextで指定された都市だから、返す予定です。 –

答えて

0

あなたはこの

let matchingStrings = resultsArray.filter { $0 == "TARGET_STRING" } 
let containsString = !matchingStrings.isEmpty 
1

正確な単語マッチングは単純なことではないように、あなたは正規表現を使用する必要があります何かをするだろう。

例えば:

var townArray = ["Leamington Spa", "Birmingham", "Coventry", "Leamington Hastings", "Royal Leamington Spa", "Lea", "Leam", "Cove"] 

let searchText = "Anyone want to meet in Leamington Spa or Coventry" 

let townRegexArray = townArray.map {townName -> (name: String, regex: NSRegularExpression) in 
    let pattern = townName.components(separatedBy: " ") 
     .map{"\\b"+NSRegularExpression.escapedPattern(for: $0)+"\\b"} 
     .joined(separator: "\\s+") 
    //print(pattern) //->\bLeamington\b\s+\bSpa\b (=="\\bLeamington\\b\\s+\\bSpa\\b")... 
    let regex = try! NSRegularExpression(pattern: pattern, options: .caseInsensitive) 
    return (name: townName, regex: regex) 
} 
let resultsArray = townRegexArray 
    .filter{$0.regex.firstMatch(in: searchText, range: NSRange(0..<searchText.utf16.count)) != nil} 
    .map{$0.name} 
print(resultsArray) //->["Leamington Spa", "Coventry"] 

\b(文字列リテラルで"\\b")正規表現のワード境界を表します。したがって\bLeam\bLeamingtonに一致しません。

関連する問題