2015-12-03 16 views
6

mit dem folgende String erhalten:Swift: Wie alles nach einem bestimmten Satz von Zeichen

var snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891" 

Wie kann ich alles extrahieren, die nach kommt „Telefon:“

Also in diesem Fall ich

will
phone = 123.456.7891 

ich habe dies versucht:

if let range = snippet.rangeOfString("Phone:") { 

     let phone = snippet.substringToIndex(range.startIndex) 
     print(phone) // prints 1111 West Main Street Beverly Hills, CA 90210 
    } 

Aber das druckt alles VORHER, ich brauche alles NACHHER.

+0

let phone = snippet.substringFromIndex (Bereich. endIndex) –

Antwort

-1

Nur func substringFromIndex verwenden aber den Index durch die Länge der "Phone:"

+3

Index erhöhen? Viel einfacher, den endIndex zu benutzen !!! –

8

In Swift 4, verwenden upperBound und Index-Betreiber und offene Bereich erhöhen:

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" 
} 

Oder betrachten wir den Leer Besatz:

if let range = snippet.range(of: "Phone:") { 
    let phone = snippet[range.upperBound...].trimmingCharacters(in: .whitespaces) 
    print(phone) // prints "123.456.7891" 
} 

Übrigens, wenn Sie versuchen, beide zur gleichen Zeit zu packen, kann ein regulärer Ausdruck, dass tun:

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)!] 
} 

Für frühere Versionen von Swift finden previous revision of this answer.

2

für eine sehr einfache Art und Weise und unter der Annahme, das Format des Strings garantieren können Sie .components(separatedBy: "Phone:") so etwas benutzen können, bevor am Index 0 und nach Index wird 1

var snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891" 
let phoneNumber = snippet.components(separatedBy: "Phone: ")[1] 
print(phoneNumber) 
//prints everything that appears after "Phone:" in your snippet string 
//"123.456.7891" 
Verwandte Themen