Swift正则表达式实现信息提取

743 阅读1分钟

需求要求从一段文本中提取指定的内容。

[type=value]content[\type]

分别提取内容 type 、 value 、 content。

let pattern = "\\[([a-zA-Z0-9]+)=([a-zA-Z0-9]*)\\]([\\w\\W]*?)\\[\\/\\1\\]"
let sample = "[id=123456]@张三[/id]"
let regex = try! NSRegularExpression(pattern: pattern)
let matches = regex.matches(in: sample, range: NSMakeRange(0, sample.count))
var subStr = [String]()
//解析出子串
for match in matches {
    for i in 0 ..< match.numberOfRanges {
        subStr.append(String(sample[Range(match.range(at: i), in: sample)!]))
    }
}
print(subStr)

输出结果

["[id=123456]@张三[/id]", "id", "123456", "@张三"]

其中[\\w\\W]*?最后一个?是懒惰模式,只匹配一次。