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
相关产品推荐
相关产品推荐

