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

Swift字符串数值提取:如何从"25% off"中提取数字25?

在Swift中提取字符串中的数值(以"25% off"为例)

嘿,我来帮你解决这个问题!在Swift里从类似"25% off"的字符串中提取数值其实有好几种实用的方法,我给你分享几个常用的:

方法一:正则表达式(通用且灵活)

正则表达式适合处理更复杂的字符串场景,比如字符串中有多组数字或者数字位置不固定的情况:

let inputString = "25% off"
do {
    // 匹配一个或多个连续数字的正则表达式
    let regex = try NSRegularExpression(pattern: "\\d+", options: [])
    // 在输入字符串中查找第一个匹配项
    if let matchResult = regex.firstMatch(in: inputString, range: NSRange(inputString.startIndex..., in: inputString)) {
        // 将NSRange转换为Swift的Range
        guard let swiftRange = Range(matchResult.range, in: inputString) else { return }
        let numberText = String(inputString[swiftRange])
        // 转换为Int类型
        if let targetNumber = Int(numberText) {
            print(targetNumber) // 输出: 25
        }
    }
} catch {
    print("正则表达式初始化失败: \(error.localizedDescription)")
}

方法二:过滤数字字符(简洁高效)

如果你的字符串里只有一组数字(就像"25% off"这种情况),直接过滤出所有数字字符再转换会更简单:

let inputString = "25% off"
// 过滤出所有数字字符
let numberText = inputString.filter { $0.isNumber }
// 转换为Int类型
if let targetNumber = Int(numberText) {
    print(targetNumber) // 输出: 25
}

拓展:处理带小数的情况

如果遇到类似"25.5% off"这样的带小数的字符串,可以稍微调整过滤逻辑:

let inputString = "25.5% off"
// 过滤数字和小数点
let numberText = inputString.filter { $0.isNumber || $0 == "." }
// 转换为Double类型
if let targetNumber = Double(numberText) {
    print(targetNumber) // 输出: 25.5
}

之前你的Swift代码没成功,大概率是正则表达式的写法问题,或者NSRange转Swift Range的时候出错了,上面的代码都已经处理了这些细节,可以直接试试~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:36:43