In Swift 4, use the upperBound and index operators and the open range:
let snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891" if let range = snippet.range(of: "Phone: ") { let phone = snippet[range.upperBound...] print(phone) // prints "123.456.7891" }
Or consider trimming spaces:
if let range = snippet.range(of: "Phone:") { let phone = snippet[range.upperBound...].trimmingCharacters(in: .whitespaces) print(phone) // prints "123.456.7891" }
By the way, if you are trying to grab both at the same time, a regex can do this:
let snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891" let regex = try! NSRegularExpression(pattern: "^(.*?)\\s*Phone:\\s*(.*)$", options: .caseInsensitive) if let match = regex.firstMatch(in: snippet, range: NSRange(snippet.startIndex ..< snippet.endIndex, in: snippet)) { let address = snippet[Range(match.range(at: 1), in: snippet)!] let phone = snippet[Range(match.range(at: 2), in: snippet)!] }
For previous versions of Swift, see the previous version of this answer .
Rob
source share