2017-03-09 44 views
-4

Swift提供哪些工具來刪除不在雙引號內的空格? [「Alexa」,「Siri」,「Thomas Marcel」]應該轉換爲[「Alexa」,「Siri」,「Thomas Marcel」]。我知道你可以使用「replacementOccurrences」,但是這將刪除引號內的空格。Swift 3刪除不在引號內的所有空格「」?

謝謝你的幫助!

編輯:感謝評論我發現我只是需要json序列化!

do { 
     let data = try JSONSerialization.data(withJSONObject: yourArray) 
     jsonString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String 
    } 
    catch { 
    } 
+3

這將是有趣知道*爲什麼*您想這樣做。這可能是一個XY問題嗎?你是如何獲得輸入字符串的?它可能是JSON? –

+1

替換的簡單方法是'','''''','''。如果你需要解析一個JSON字符串,只需使用JSONSerializarion –

+1

這是用於JSON字符串嗎?如果是這樣,你可以反序列化,然後重新序列化它,而不用'prettyPrinted'寫入選項。 – JeremyP

回答

1

讓JSON做的工作對你可能是一個更好的計劃,但是,只是爲了好玩,你可以做這樣的事情:

var line = "[\"Alexa\",   \"Siri\", \"Thomas Marcel\"]" 

line = line.components(separatedBy:"\"") 
      .enumerated() 
      .map{ ($0 % 2 == 1) ? $1 : $1.replacingOccurrences(of: " ", with: "") } 
      .joined(separator: "\"") 

// line will contain: ["Alexa","Siri","Thomas Marcel"] 
1

首先,這不完全是一個正則表達式問題,應該有一個更好的解決方案,使用json序列化按照評論。儘管如此,作爲正則表達式被標記,因此下面的解決方案是檢查問題是否可在正則表達式的方式解決......

你可以試試這個:

\s(?=(([^\"]*\"[^\"]*){2})*$) 

而且通過""更換空

Demo

記住它可能會導致災難性的回溯或超時,如果每個字符串太大....所以,如果你只有通過regex replace做那麼我認爲你ç遵循這種方法......同時這樣做,在每條線上分別應用正則表達式,而不是一次提供整行線。

+1

OP實際上並不需要任何這個。他們需要JSONSerialization。請參閱問題下的評論。 :) – Moritz

+1

我知道其實..它與json序列化有關......但看看努力;)只是想看看,如果可以做到......如他所願:P –