首页 > 解决方案 > IOS如何在swift中获取多个String.range(of:string)

问题描述

MyText 是

let myString: NSAttributedString = <siren> 123123 <siren> 123123 <siren>
let myRange = myString.string.range(of:"<siren>")
let newString = NSMutableAttributedString()
newString.append(myString)
if myRange != nil{
  newString.replaceCharacters(in: NSRange(myRange, in:myString.string), 
            with:myAttributeString as NSAttributedString!)
}

如果myString有一个<siren>,这是有效的,但是当它有两个以上时它不起作用<siren>

仅先更换<siren>

我认为String.range返回第一个值

如何找到它们?

标签: iosswiftswift3nsmutablestring

解决方案


如果你想找到所有范围,你可以尝试使用这个问题的解决方案get all range of a substring in a string in swift

但如果您的主要目的是替换某些字符串/模式的出现,您可以添加这样的扩展名:

extension String {

  func replacing(pattern: String, withTemplate: String) throws -> String {
    let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
    return regex.stringByReplacingMatches(in: self,
                                          options: [],
                                          range: NSRange(0 ..< utf16.count),
                                          withTemplate: withTemplate)
  }
}

推荐阅读