另一種方法是NSRegularExpression
其被設計成很容易地通過在一個字符串匹配迭代。如果您使用.ignoreMetacharacters
選項,它將不會應用任何複雜的通配符/正則表達式邏輯,但只會查找有問題的字符串。所以考慮:
let string = "hey hi hello, hey hi hello" // string to search within
let searchString = "hello" // string to search for
let matchToFind = 2 // grab the second occurrence
let regex = try! NSRegularExpression(pattern: searchString, options: [.caseInsensitive, .ignoreMetacharacters])
你可以使用enumerateMatches
:
var count = 0
let range = NSRange(string.startIndex ..< string.endIndex, in: string)
regex.enumerateMatches(in: string, range: range) { result, _, stop in
count += 1
if count == matchToFind {
print(result!.range.location)
stop.pointee = true
}
}
或者,你可以找到所有的人都用matches(in:range:)
,然後抓住第n之一:
let matches = regex.matches(in: string, range: range)
if matches.count >= matchToFind {
print(matches[matchToFind - 1].range.location)
}
顯然,如果您非常喜歡,則可以省略.ignoreMetacharacters
選項並允許用戶執行正則表達式搜索(例如通配符,全文搜索,詞的開始等)。
對於Swift 2,請參閱previous revision of this answer。
來源
2016-09-07 05:17:26
Rob
這主要是重複的http://stackoverflow.com/questions/28685420/search-string-for-repeating-instances-of-a-word – rmaddy
@rmaddy似乎對我有幫助,但不完全正是我在這裏問。謝謝你。 – owlswipe
答案正是你一般需要的。通過傳遞從第一個子字符串結尾開始的範圍來獲得第二個子字符串。 – rmaddy