首页 > 解决方案 > Swift - 使用正则表达式拆分字符串 - 忽略搜索字符串

问题描述

这里给出了一个聪明的第一个答案,用于使用正则表达式拆分快速字符串

拆分字符串答案

但是,它将搜索到的文本保留在答案数组中。我正在尝试做类似的事情,但忽略充当分隔符的字符(例如,就像 swift split 函数,但只是使用正则表达式作为分隔符)。

例如:正则表达式类似于

"\\\||Z|ZY"

当应用于字符串时,"hi|thisZshouldZYbe|separated"你会得到一个数组

["hi", "this", "should", "be", "separated"]

注意。正则表达式适用于带有双重转义的 swift NSRegularExpression 格式。在常规正则表达式中,它只是“\||Z|ZY”另外注意,正则表达式包含垂直线符号而不是字母“l”

您可能不需要对原件进行太多调整即可工作。

标签: regexswift4nsregularexpression

解决方案


你可以像这样定义一个扩展:

extension String {
    func split(usingRegex pattern: String) -> [String] {
        //### Crashes when you pass invalid `pattern`
        let regex = try! NSRegularExpression(pattern: pattern)
        let matches = regex.matches(in: self, range: NSRange(0..<utf16.count))
        let ranges = [startIndex..<startIndex] + matches.map{Range($0.range, in: self)!} + [endIndex..<endIndex]
        return (0...matches.count).map {String(self[ranges[$0].upperBound..<ranges[$0+1].lowerBound])}
    }
}

let str = "hi|thisZshouldZYbe|separated"
let separator = "\\||ZY?"
let result = str.split(usingRegex: separator)
print(result) //->["hi", "this", "should", "be", "separated"]

当您使用 时,上面的代码无法按预期工作"\\||Z|ZY",但我认为您可以修改您的模式以适应此扩展。


推荐阅读