ios - 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
返回第一个值
如何找到它们?
解决方案
如果你想找到所有范围,你可以尝试使用这个问题的解决方案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)
}
}
推荐阅读
- excel - 如何将公式传递给vba中的excel文件
- python - 从 Traefik/Streamlit/Docker 应用程序中的基本身份验证机制获取用户名
- c# - 如何从 ASP.NET MVC 中的数据库中删除对象?
- python - Python 上的广义随机森林/因果森林
- python - 我可以将 Kivy 对象 ID 引用分配给 Python Dict
- google-sheets - 根据今天的股价是否上涨,更改单元格的颜色(绿色或红色)
- xamarin.forms - 无法在 UWP Xamarin.Forms 中创建引用 SQLiteNetExtensions 的表
- r - 在 R 的 for 循环中设置列表对象的子集
- c++ - 在 C++ 中用“$”编写原始字符串的正确格式是什么?
- javascript - 获取时的 POST 请求返回 400(阅读问题)