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

如何正确检测字符串中括号内数字并处理对应列表元素?

实现方案

核心思路

  1. 用正则表达式定位名称里括号内的数字
  2. 遍历列表逐个处理元素:
    • 匹配到数字时,移除名称中的括号及数字,再将两个浮点数除以该数字
    • 未匹配到则保留原元素不变

代码实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:32:42