Objective-C中提取字符串数字:如何从$22.00中提取22而非2200
解决提取金额整数部分的问题
嘿,这个坑我之前踩过!你得到2200的原因大概率是代码把字符串里所有数字字符都提取出来拼接在一起了——把22和小数点后的00直接连起来了。咱们来用几种靠谱的方法解决这个问题:
方法一:正则精准匹配金额结构
利用正则表达式定位$符号后面的金额部分,再提取整数部分:
import re bill_text = "Total Bill : $22.00" # 匹配$后带小数点的金额格式,捕获数字部分 match_result = re.search(r'\$(\d+\.\d{2})', bill_text) if match_result: full_amount = match_result.group(1) # 得到 "22.00" # 方法1:按小数点分割取前半部分 integer_part = full_amount.split('.')[0] print(integer_part) # 输出 22 # 方法2:转成浮点数后取整(适合需要数值类型的场景) integer_amount = int(float(full_amount)) print(integer_amount) # 输出 22
方法二:字符串索引定位
如果你的账单格式固定是$X.XX这种结构,直接通过索引截取也很简单:
bill_text = "Total Bill : $22.00" dollar_pos = bill_text.find('$') if dollar_pos != -1: dot_pos = bill_text.find('.', dollar_pos) if dot_pos != -1: integer_part = bill_text[dollar_pos+1:dot_pos] print(integer_part) # 输出 22
为什么之前会得到2200?
举个反例,如果你的代码是这样的:
import re digits = re.findall(r'\d', bill_text) print(''.join(digits)) # 输出 2200
它会把字符串里所有数字字符(包括小数点后的00)都捞出来拼接,自然就得到了2200。所以关键是要精准匹配金额的完整结构,而不是提取所有数字。
内容的提问来源于stack exchange,提问作者Nabeel
相关产品推荐
相关产品推荐

