Как получить строку, содержащую количество точного предложения / слова в swift 4? - PullRequest
1 голос
/ 19 сентября 2019

Я ищу в своей строке точное количество слов / предложений, например:
Что я пробовал:

let str = "Art of swift, now art of swift5 but this is true art of swift from 2014 now what do you think about art of swift?"
var search = "art of swift"

str.contains(word:search)
var count = str.lowercased().components(separatedBy: search.lowercased()).count
print(count - 1) 

Вывод:

  4

Я ищуэто должно быть 3, потому что art of swift5 не ищет поиск.

В приведенном выше примере возвращается 4 из-за найденного слова «art of swift» в слове «art of swift5».Мне нужен метод, который вернет 3 в этом состоянии.

Но у метода есть еще несколько случаев:

Разрешить
без учета регистра для пользователя может быть прописным или строчным, это не имеет значения для счетчика результатов поиска.Например, пользователь, вставивший Art of swift в текстовую строку, имеет art of swift

 Art of swift // it will return true as found 1

, разрешают любые специальные символы, например, ? , . etc

art of swift? // it will return true as found 1

, даже специальные символы с символами позволяют, например, `

art of swift's // it will return true as found 1

Не разрешать:
не разрешать символы разных языков, например

art of swiftবাং // it will return false as not found 0

, даже если не разрешены символы одного языка

art of swiftly // it will return false as not found 0

Зачем это нужно?

Я пытаюсь реализовать результаты поиска, чтобы показать, что они основаны на приоритете наилучшего соответствия.

1 Ответ

2 голосов
/ 20 сентября 2019
import Foundation

extension String {
    func nazmulCount(of needle: String) -> Int {
        let pattern = "\\b" + NSRegularExpression.escapedPattern(for: needle) + "\\b"
        let rex = try! NSRegularExpression(pattern: pattern, options: [.caseInsensitive])
        return rex.matches(in: self, options: [], range: NSRange(startIndex..., in: self)).count
    }
}

"Art of swift, now art of swift5 but this is true art of swift from 2014 now what do you think about art of swift?".nazmulCount(of: "art of swift")
// 3

"Art of swift".nazmulCount(of: "art of swift")
// 1

"art of swift?".nazmulCount(of: "art of swift")
// 1

"art of swift's".nazmulCount(of: "art of swift")
// 1

"art of swiftবাং".nazmulCount(of: "art of swift")
// 0

"art of swiftly".nazmulCount(of: "art of swift")
// 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...