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

Swift中如何提取以6位数字开头、$结尾的子字符串?

Swift中提取符合特定模式的子字符串

要提取以6位数字开头、以$结尾的子字符串,最直接的方式是用正则表达式匹配目标模式,具体实现步骤如下:

1. 确定正则模式

我们需要的模式规则:

  • 开头是6位数字:用\d{6}表示
  • 中间是任意内容(直到最近的$):用.*?做非贪婪匹配(避免匹配到最后一个$,确保每个6位数字对应最近的结束符)
  • 结尾是$:用\$转义(因为$在正则里是特殊字符)

最终的正则模式为:\d{6}.*?\$,用Swift的raw string写法更简洁:#"\d{6}.*?\$"#

2. 完整实现代码

import Foundation

let str = "Some random text 034503 intermediate text $ some more random text 873234 more intermediate text $."

// 定义正则模式
let pattern = #"\d{6}.*?\$"#

do {
    // 创建正则表达式实例
    let regex = try NSRegularExpression(pattern: pattern)
    // 获取所有匹配结果
    let matches = regex.matches(in: str, range: NSRange(str.startIndex..., in: str))
    
    // 遍历匹配结果,提取子字符串
    let matchedSubstrings = matches.map { match in
        let swiftRange = Range(match.range, in: str)!
        return String(str[swiftRange])
    }
    
    // 输出结果
    print(matchedSubstrings)
    // 控制台输出: ["034503 intermediate text $", "873234 more intermediate text $"]
} catch {
    print("正则表达式初始化失败: \(error.localizedDescription)")
}

关键说明

  • 非贪婪匹配:如果把.*?换成.*,会从第一个6位数字直接匹配到最后一个$,导致只得到一个结果,而非我们需要的两个独立子字符串。
  • NSRange转Swift Range:因为NSRegularExpression返回的是NSRange,需要转换成Swift原生的Range才能正确从字符串中截取内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:32:44