如何正确检测字符串中括号内数字并处理对应列表元素?
实现方案
核心思路
- 用正则表达式定位名称里括号内的数字
- 遍历列表逐个处理元素:
- 匹配到数字时,移除名称中的括号及数字,再将两个浮点数除以该数字
- 未匹配到则保留原元素不变
代码实现
import re # 示例输入列表 original_list = [ ("Banana (3)", 9.0, 6.0), ("Orange", 4.0, 2.0), ("Grape (2)", 8.0, 4.0), ("Apple (5)", 10.0, 15.0) ] processed_list = [] # 匹配括号内数字的正则模式,捕获组1为数字部分 pattern = r'\((\d+)\)' for item in original_list: name, f1, f2 = item match = re.search(pattern, name) if match: # 提取数字并转为整数 divisor = int(match.group(1)) # 移除名称中的括号及数字(含可能的前置空格) new_name = re.sub(r'\s*\(\d+\)', '', name).strip() # 计算新的浮点数 new_f1 = f1 / divisor new_f2 = f2 / divisor processed_list.append((new_name, new_f1, new_f2)) else: processed_list.append(item) # 输出结果 print(processed_list)
关键步骤解释
- 正则匹配:
re.search(r'\((\d+)\)', name)查找名称中(数字)格式的内容,(\d+)捕获组用于提取数字部分。 - 名称清理:
re.sub(r'\s*\(\d+\)', '', name)替换掉(数字)及可能的前置空格,strip()确保名称无多余空格。 - 浮点数计算:将原浮点数除以提取到的数字,得到新数值。
注意事项
- 若括号内是小数(如
(2.5)),把正则改成r'\((\d+\.?\d*)\)',并将divisor转为float类型。 - 要确保提取的数字不为0,否则会触发除以0错误,可添加
if divisor != 0的判断。
内容的提问来源于stack exchange,提问作者Tabalzu
相关产品推荐
相关产品推荐

