2016-07-07 17 views
1

Ich habe eine Zeichenfolge wie unten gezeigt, und ich versuche, jeden Teil (,) in ein Array zu trennen.Werte aus der Zeichenfolge in swift extrahieren

let stringArr = remainderString.componentsSeparatedByString(",") 

0lY6P5Ur90TAQnnnI6wtnb, # 29, Projekt-FZK-Haus, Projekt FZK-Haus erstellen von KHH Forschuungszentrum Karlsruhe, $, $, $, (67 #, # 229, # 275), # 42

Ergebnisse

["0lY6P5Ur90TAQnnnI6wtnb", "#29", "Projekt-FZK-Haus", "Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe", "$", "$", "$", "(#67", "#229", "#275)", "#42"] 

Wenn Sie bemerken, die Teil (67 #, # 229, # 275) wir wieder getrennt in "(# 67", "# 229", "# 275)"

Ich möchte diese Werte innerhalb der (geschweiften Klammern) in ein anderes Array einfügen. Also meine Frage ist, wie kann ich die Öffnung ( und dann die Schließung ) lokalisieren?

+0

eine Frage, wollen Sie alle (# 67, # 229, # 275) als ein Text, oder Sie wollen nur wissen, wann geöffnet und Ihre Klammer schließen? –

+1

Sie könnten ein ['let regex =" \\ ([^()] * \\) | [^,] + "'] (https://regex101.com/r/fG8wZ6/1) regex verwenden, um zu passen die Teilstrings separat. –

+0

@ReinierMelian Ich versuche, eine öffnende Klammer mit einer schließenden Klammer zusammenzubringen. Wenn ich es als einen Text bekomme, ist das in Ordnung. –

Antwort

0

Ein anderes Beispiel. Verwenden Sie UTF-16-basierten Index und Bereich ordnungsgemäß, so funktioniert mit Zeichenfolgen einschließlich Nicht-BMP-Zeichen.

let str = "0lY6P5Ur90TAQnnnI6wtnb,#29,Projekt-FZK-Haus,Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe,$,$,$,(#67,#229,#275),#42" 
let pattern = "(\\([^\\)]*\\)|[^\\(,][^,]*)(?:,|$)" 
let regex = try! NSRegularExpression(pattern: pattern, options: []) 
let matches = regex.matchesInString(str, options: [], range: NSRange(0..<str.utf16.count)) 
let stringArr = matches.map{match->String in 
    let matchingRange = match.rangeAtIndex(1) 
    let matchingString = (str as NSString).substringWithRange(matchingRange) as String 
    return matchingString 
} 
print(stringArr) //->["0lY6P5Ur90TAQnnnI6wtnb", "#29", "Projekt-FZK-Haus", "Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe", "$", "$", "$", "(#67,#229,#275)", "#42"] 
+0

Genau die Lösung, nach der ich gesucht habe. Vielen Dank. –

2

Versuchen Sie folgendes:

// Subscripting a String with NSRange. Make dealing with ObjC-classes easier 
extension String { 
    subscript(range: NSRange) -> String { 
     let startIndex = self.startIndex.advancedBy(range.location) 
     let endIndex = startIndex.advancedBy(range.length) 

     return self[startIndex..<endIndex] 
    } 
} 

let str = "0lY6P5Ur90TAQnnnI6wtnb,#29,Projekt-FZK-Haus,Projekt FZK-House create by KHH Forschuungszentrum Karlsruhe,$,$,$,(#67,#229,#275),#42" 
let regex = try! NSRegularExpression(pattern: "\\((#[^\\)]+)\\)", options: []) 

if let match = regex.firstMatchInString(str, options: [], range: NSMakeRange(0, str.characters.count)) { 
    let substr = str[match.rangeAtIndex(1)] 
    let components = substr.componentsSeparatedByString(",") 

    print(components) 
} 
+0

Um mit Bereichen arbeiten zu können, die auf der Natur von NSString basieren, können Sie keinen Zeichen-basierten Index verwenden. NSString verwendet einen UTF-16-basierten Index. Daher muss Ihr Code so geändert werden, dass er utf16-basierten Index und Bereich verwendet. – OOPer

+0

@Code Verschiedenes vielen Dank. Ich habe es getan und es scheint zu funktionieren. –

Verwandte Themen