首页 > 解决方案 > 在 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)
    }
}

标签: swiftregexstringreplace

解决方案


所以,我终于找到了最简单的解决方案:

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)
    }
}

我只是使用复杂的正则表达式来组合所有查找字符串,然后为每个文件一次性完成。


推荐阅读