2017-03-09 47 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 –