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

如何在Swift中使用正则表达式提取并打印方括号内的字符串

Swift正则提取方括号内容的解决方案

错误原因

  • 正则内的[、]是特殊元字符,用于定义字符组,匹配字面量方括号必须转义,在Swift字符串中需要写为\\[和\\]
  • 你当前的正则没有设置捕获组,无法单独提取方括号内的目标内容
  • 第一行正则末尾的\n前多了多余的匹配逻辑,原字符串[62AD]后直接接换行,原有写法无法匹配到对应内容

最优实现方案

统一用单条正则匹配所有方括号内的目标内容,代码更简洁:

let output = "\"Living Room\" [62AD]\n Hub \"Living Room\" [21BC]:"
let range = NSRange(output.startIndex..<output.endIndex, in: output)
// 正则中用小括号定义捕获组,单独提取方括号内的大写字母+数字组合
let pattern = "\\[([A-Z0-9]+)\\]"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let matches = regex.matches(in: output, options: [], range: range)

for match in matches {
    // range(at: 0)是整个匹配到的串,range(at: 1)对应我们定义的第一个捕获组内容
    let captureRange = match.range(at: 1)
    if let swiftRange = Range(captureRange, in: output) {
        let result = String(output[swiftRange])
        print(result) // 依次输出62AD、21BC
    }
}

保留原有双正则逻辑的修正代码

如果你需要按原来的逻辑分两次匹配,修正后的写法如下:

let output = "\"Living Room\" [62AD]\n Hub \"Living Room\" [21BC]:"
let range = NSRange(output.startIndex..<output.endIndex, in: output)

let patternToMatch1 = "\"Living Room\" \\[([A-Z0-9]+)\\]\n"
let patternToMatch2 = "Hub \"Living Room\" \\[([A-Z0-9]+)\\]:"

let captureRegex1 = try! NSRegularExpression(pattern: patternToMatch1, options: [])
let captureRegex2 = try! NSRegularExpression(pattern: patternToMatch2, options: [])

if let match1 = captureRegex1.firstMatch(in: output, options: [], range: range),
   let range1 = Range(match1.range(at: 1), in: output) {
    print(String(output[range1])) // 输出62AD
}

if let match2 = captureRegex2.firstMatch(in: output, options: [], range: range),
   let range2 = Range(match2.range(at: 1), in: output) {
    print(String(output[range2])) // 输出21BC
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:12:00