2016-07-09 9 views
0

Ich habe eine Funktion erstellt, die in Swift 3.0 eine RegularExpression generiert. Ich bin nah dran, was ich will, aber der Backslash verursacht mir eine Menge Ärger.Verwenden einer switch-Anweisung zum Erstellen eines Regulären Ausdrucks in Swift 3

Ich habe mir Swift Documentation angesehen und ich dachte, das Ändern des "\" zu \u{005C} oder u{005C} würde das Problem lösen, aber es tut es nicht.

Hier ist das Array ich meine Regex Erzeugungsfunktion Fütterung:

var letterArray = ["a","","a","","","","","","",""] 

Hier ist der relevante Teil meiner Methode:

var outputString = String() 

// getMinimumWordLength returns 3 
let minimumWordLength = getMinimumWordLength(letterArray: letterArray) 
// for the array above, maximumWordLength returns 10 
let maximumWordLength = letterArray.count 

var index = 0 

for letter in letterArray { 
    if index < minimumWordLength { 
     if letter as! String != "" { 
      outputString = outputString + letter.lowercased 
     } else { 
      // this puts an extra \ in my regex 
      outputString = outputString + "\\w" // first \ is an escape character, 2nd one gets read 
      // this puts an extra backslash in, too 
      // outputString = outputString + "\u{005C}w" 
     } 
    } 
    index += 1 
} 

outputString = outputString + ("{\(minimumWordLength),\(maximumWordLength)}$/") 

return outputString 

Meine gewünschte Ausgabe ist:

a\wa{3,10}$/ 

Meine tatsächliche Ausgabe ist:

a\\wa{3,10}$/ 

Wenn jemand Vorschläge hat, was ich beschmutze, begrüße ich sie. Danke fürs Lesen.

+0

Ich weiß nicht, was Sie versuchen, aber Ihr Code gibt die gewünschte Ausgabe. Das einzige, was ich gemacht habe, war, die runden Klammern nach 'lowcased' einzufügen:' outputString = outputString + letter.lowercased() ' –

+1

Fügen Sie' print (outputString) 'hinzu und sehen Sie, was Sie bekommen. (Ich benötigte den Fix, der von Code Different angezeigt wird.) – OOPer

Antwort

1

Wenn die Zeichenfolge im Debugger gedruckt wird, wird das Escape-Zeichen angezeigt. Wenn es für den Benutzer angezeigt wird, wird es nicht. enter image description here

+0

Ugh! Ich wusste, es wäre einfach, aber mein Gott! Vielen Dank! Ich debugge gerade und benutze keine print-Anweisung b/c es geht durch eine bajillion Aufzeichnungen. – Adrian

Verwandte Themen