swift - 在 Swift 中通过正则表达式替换大量字符串的更快方法
问题描述
我注意到String.replacingOccurrences
工作太慢了。
content = content.replacingOccurrences(of: lookup, with: replace)
我想知道是否有人知道 Swift 中这个问题的更好解决方案?也许一些用于快速就地替换的框架或方法?
完整功能代码:
/// Replacing content of each file by regex criteria in selected folder.
private func replaceContent(occurrences: [(lookup: String, replace: String)],
inFilesByRegEx fileRegEx: String,
folder: Folder) throws {
let regex = try RegEx(pattern: fileRegEx)
for file in folder.files.recursive where regex.test(file.path) {
var content = try file.readAsString()
for (lookup, replace) in occurrences {
content = content.replacingOccurrences(of: lookup, with: replace)
}
try file.write(content)
}
}
解决方案
所以,我终于找到了最简单的解决方案:
private func replace(_ lookup: String,
with replace: String,
inFilesByRegEx fileRegEx: String,
folder: Folder) throws {
let regex = try RegEx(pattern: fileRegEx)
for file in folder.files.recursive where regex.test(file.path) {
var content = try file.readAsString()
content = content.replacingOccurrences(of: lookup, with: replace, options: .regularExpression)
try file.write(content)
}
}
我只是使用复杂的正则表达式来组合所有查找字符串,然后为每个文件一次性完成。
推荐阅读
- python - 使用 ast 时出现类型错误
- sql - 在 Postgres 中查询以获取模式名称
- winapi - Win GDI DrawText 渲染错误
- powerbi - 获得一个组的 MAX 并且仍然能够过滤?
- python - 我可以在 pygments 中使用 SystemVerilogLexer 从 verilog 文件中检索端口吗?
- reactjs - react 语义 ui 组件 IntelliSense 无向导导入组件
- java - JUnit 5 Spring Security WebMvcTest 没有 PasswordEncoder 类型的 bean
- javascript - 在递增 1 的循环中将变量递增 3
- android - 应用程序可以创建 webview 的 cookie 吗?
- javascript - 在推送梁通知上播放声音