Swift Заменить несколько символов в строке

Ниже приведена следующая строка кода, которую я использую, чтобы заменить тег разрыва HTML на возврат каретки. Однако у меня есть другие HTML-символы, которые мне нужно заменить, и когда я снова назову эту строку кода, с разными параметрами, это как если бы первый был перезаписан. Есть ли способ включить несколько параметров? Есть ли более эффективный способ сделать это в Swift? Например: замените оба br > на "и nbsp на" ".

textView.text = content.stringByReplacingOccurrencesOfString("<br /><br />", withString:"\r")

Ответ 1

Используйте replaceOccurrences вместе с опцией String.CompareOptions.regularExpresion.

Пример (Swift 3):

var x = "<Hello, [play^ground+]>"
let y = x.replacingOccurrences(of: "[\\[\\]^+<>]", with: "7", options: .regularExpression, range: nil)
print(y)

Входные символы, которые должны быть заменены в квадратных скобках, так [\\ Символы]

Вывод:

7Hello, 7play7ground777

Ответ 2

Я решил это на основе идеи Rosetta Code

extension String {
    func stringByRemovingAll(characters: [Character]) -> String {
        return String(self.characters.filter({ !characters.contains($0) }))
    }

    func stringByRemovingAll(subStrings: [String]) -> String {
        var resultString = self
        subStrings.map { resultString = resultString.stringByReplacingOccurrencesOfString($0, withString: "") }
        return resultString
    }
}

Пример:

let str = "Hello, stackoverflow"
let chars: [Character] = ["a", "e", "i"]
let myStrings = ["Hello", ", ", "overflow"]

let newString = str.stringByRemovingAll(chars)
let anotherString = str.stringByRemovingAll(myStrings)

Результат при печати:

newString: Hllo, stckovrflow

anotherString: stack

Ответ 3

Как сказал @matt, вы начинаете с той же строки content. Метод stringByReplacingOccurrencesOfString фактически ничего не меняет в исходной строке content. Он возвращает вам новую строку с изменениями замены, а content остается неизменным.

Что-то вроде этого должно работать для вас

let result1 = content.stringByReplacingOccurrencesOfString("<br /><br />", withString:"\r") 
let result2 = result1.stringByReplacingOccurrencesOfString(" &nbsp;", withString:" ")
textView.text = result2

Ответ 4

extension String {
    var html2AttributedString:NSAttributedString {
        return NSAttributedString(data: dataUsingEncoding(NSUTF8StringEncoding)!, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding], documentAttributes: nil, error: nil)!
    }
}

let myHtmlCode = "<style type=\"text/css\">#red{color:#F00}#green{color:#0F0}#blue{color: #00F}</style><span id=\"red\" >Red</span> <span id=\"green\" >Green</span><span id=\"blue\">Blue</span>"

myHtmlCode.html2AttributedString