如何更换字符串的部分和更多。斯威夫特4

问题描述 投票:-1回答:2

我有一个字符串:

"Location: &lt;&lt;LesionLoc&gt;&gt;<br>
Quality: &lt;&lt;TESTTEST&gt;&gt;<br>"

最终结果应该是:

Location: &lt;span class=\"span_dropdowntext\" keyword=\"LesionLoc\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;LesionLoc&lt;/span&gt;
Quality: &lt;span class=\"span_dropdowntext\" keyword=\"TESTTEST\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt; TESTTEST&lt;/span&gt;

如您所见,我所要做的就是:

  1. &lt;&lt;替换&lt;span class=\"span_dropdowntext\" keyword=\"LesionLoc\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;
  2. &gt;&gt;替换&lt;/span&gt;
  3. 最后,(这让我很难过),将字符串“LesionLoc”和“TESTTEST”插入keyword=/"/"部分。

替换很容易,只需使用string.replacingOcurences然后我认为如果我可以循环遍历所有&lt;&lt;&gt;&gt;,在循环内替换它并将字符串插入关键字部分会更好。

我真的迷失了。有人提到使用索引和子字符串函数来返回新字符串,但我不知道如何处理它。

谢谢。

swift string indexing substring
2个回答
1
投票

首先,您必须找到您的关键字(在这种情况下是LesionLocTESTTEST)。您可以使用带有正则表达式NSRegularExpression&lt;&lt;[a-z0-9]+&gt;&gt;找到它

接下来,用你的&lt;&lt;替换

&lt;span class=\"span_dropdowntext\" keyword=\"<KEYWORD>\"style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;

&gt;&gt;&lt;/span&gt;

您可以使用这个非常简单的代码

var string = "Location: &lt;&lt;LesionLoc&gt;&gt;<br>\nQuality: &lt;&lt;TESTTEST&gt;&gt;<br>"

do {
    let regex = try NSRegularExpression(pattern: "&lt;&lt;[a-z0-9]+&gt;&gt;", options: NSRegularExpression.Options.caseInsensitive)
    for text in regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.count)).reversed() {
        let keyword = (string as NSString).substring(with: text.range).replacingOccurrences(of: "&lt;&lt;", with: "").replacingOccurrences(of: "&gt;&gt;", with: "")
        let newString = "&lt;span class=\"span_dropdowntext\" keyword=\"\(keyword)\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;\(keyword)&lt;/span&gt;"
        string = (string as NSString).replacingCharacters(in: text.range, with: newString)
    }
    print(string)
} catch {
    print(error.localizedDescription)
}

0
投票
 private func replaceString(_ str : String)->String{
    guard let keyword = findKeyword(str) else{
        fatalError()
    }
    let replacementString = "&lt;span class=\"span_dropdowntext\" keyword=\"\(keyword)\" style=\"color:blue;font-weight:bold;\"contenteditable=\"False\"&gt;"

    var newString = str.replacingOccurrences(of: "&gt;&gt", with: "&lt;/span&gt")
    newString = newString.replacingOccurrences(of: "&lt;&lt;", with: replacementString)
    return newString
}

private func findKeyword(_ s : String)->String?{
    var str = Array(s)
    let firstKey = "&lt;&lt;"
    let secondKey = "&gt;&gt"

    var startingIndex : Int = 0
    var movingIndex : Int = 0

    while  movingIndex < str.count + 1 - secondKey.count && startingIndex < str.count + 1 - firstKey.count{
        if String(str[startingIndex..<startingIndex + firstKey.count]) != firstKey{
            startingIndex += 1
        }else{
            if movingIndex < startingIndex + firstKey.count{
                movingIndex = startingIndex + firstKey.count
            }else{
                if String(str[movingIndex..<movingIndex + secondKey.count]) != secondKey{
                    movingIndex += 1
                }else{
                    return String(str[startingIndex+firstKey.count..<movingIndex])
                }
            }
        }
    }

    return nil
}

现在,您可以使用replaceString函数来完成工作

let string = "Location: &lt;&lt;LesionLoc&gt;&gt;<br>"
print(replaceString(string))

你的最终结果将是

Location: &lt;span class="span_dropdowntext" keyword="LesionLoc" style="color:blue;font-weight:bold;"contenteditable="False"&gt;LesionLoc&lt;/span&gt;<br>

结果字符串的末尾有一个“br”。我不知道你是否想删除它.​​.但如果你这样做,你应该知道如何。

© www.soinside.com 2019 - 2024. All rights reserved.