You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何提取方括号包裹的子字符串并遍历结果?

如何从字符串中提取方括号内的内容并生成数组?

当然应该用正则!这绝对是处理这类字符串提取需求最简洁可靠的方案,你的思路完全没问题,只是代码里有几个小细节需要调整,我来帮你修正并把整个流程讲清楚:

首先,你写的正则模式里多了前后的/分隔符——在NSRegularExpression里不需要这个,而且方括号是正则中的特殊字符,需要用反斜杠转义,所以正确的模式应该是\\[(.*?)\\]。

下面是完整的可运行代码:

let string = "Users: [Ricky], [Bob], [Jane]"
// 转义方括号,非贪婪匹配括号内的内容
let pattern = "\\[(.*?)\\]"
do {
    let regex = try NSRegularExpression(pattern: pattern)
    // 注意:NSRange是基于UTF-16编码的,所以用string.utf16.count
    let fullRange = NSRange(location: 0, length: string.utf16.count)
    // 获取所有匹配结果
    let matches = regex.matches(in: string, range: fullRange)
    // 遍历匹配结果,提取括号内的内容并转成数组
    let result = matches.compactMap { match in
        // range(at:1)对应正则里的捕获分组(也就是括号内的部分)
        guard let groupRange = Range(match.range(at: 1), in: string) else {
            return nil
        }
        return String(string[groupRange])
    }
    print(result) // 输出 ["Ricky", "Bob", "Jane"]
} catch {
    print("正则表达式初始化失败:\(error.localizedDescription)")
}

关键步骤解释:

  • 正则\\[(.*?)\\]:\\[匹配左方括号,(.*?)是非贪婪匹配(确保只抓取到最近的右括号,不会把多个括号内的内容连在一起),\\]匹配右方括号;
  • 使用string.utf16.count创建NSRange:因为NSRegularExpression是基于UTF-16编码工作的,如果用utf8.count,遇到emoji这类多字节字符会导致范围计算错误;
  • compactMap遍历匹配结果:每个match的range(at:1)对应我们要的括号内内容,把它转成Swift的Range后提取子字符串,最终过滤掉可能的无效值得到目标数组。

如果你不想用正则,也可以手动遍历字符串来提取(适合简单场景):

let string = "Users: [Ricky], [Bob], [Jane]"
var result = [String]()
var currentPosition = string.startIndex

while let openBracket = string[currentPosition...].firstIndex(of: "[") {
    let contentStart = string.index(after: openBracket)
    if let closeBracket = string[contentStart...].firstIndex(of: "]") {
        let userName = String(string[contentStart..<closeBracket])
        result.append(userName)
        currentPosition = string.index(after: closeBracket)
    } else {
        // 遇到不完整的括号,提前终止循环
        break
    }
}
print(result) // 输出 ["Ricky", "Bob", "Jane"]

不过这种手动方法在字符串格式复杂(比如嵌套括号、括号内包含特殊字符)时,鲁棒性远不如正则,所以还是优先推荐正则方案。

内容的提问来源于stack exchange,提问作者Ricky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:42:11