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

如何按P、D、R拆分字符串并按字母组求和转列?

拆分字符串并按P/D/R分组求和的最优方法

给定字符串 P12D1P13D1P2D47R1D37P3D1R10D10,我们需要拆分出所有P、D、R后面的数字,分别求和后整理为如下列格式:

PDR
309711

以下是不同场景下的最优实现方法:

Excel(适用于数据表批量处理)

如果使用Excel 365或新版Excel,可直接用函数组合实现:

  • P列求和:=SUM(TEXTBEFORE(TEXTAFTER(A1,"P",SEQUENCE(LEN(A1)-LEN(SUBSTITUTE(A1,"P","")))),{"D","R"}))
  • D列求和:把公式里的"P"替换成"D",{"D","R"}替换成{"P","R"}
  • R列求和:把公式里的"P"替换成"R",{"D","R"}替换成{"P","D"}

也可以用FILTERXML更灵活处理:

  1. 先将字符串转换为XML结构:="<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"P","</s><s>P"),"D","</s><s>D"),"R","</s><s>R")&"</s></t>"
  2. 对P求和:=SUM(FILTERXML(B1,"//s[starts-with(.,'P')]/substring(.,2)")),同理替换字母即可得到D、R的和。

Python(适用于编程或自动化处理)

用正则表达式提取所有字母-数字对,再分组求和是最简洁的方式:

import re

target_str = "P12D1P13D1P2D47R1D37P3D1R10D10"
# 提取所有P/D/R后跟数字的匹配项
matches = re.findall(r'([PDR])(\d+)', target_str)

sum_result = {'P': 0, 'D': 0, 'R': 0}
for char, num in matches:
    sum_result[char] += int(num)

# 输出结果
print(sum_result)  # 输出: {'P': 30, 'D': 97, 'R': 11}

# 如果需要转为表格格式,用pandas
import pandas as pd
result_df = pd.DataFrame([sum_result])
print(result_df)

Power Query(适用于Excel数据表批量转换)

适合处理整张数据表的批量转换:

  1. 将数据表导入Power Query,选中字符串列
  2. 添加自定义列,用正则提取所有匹配项:
    = List.Transform(Regex.Matches([字符串列], "([PDR])(\d+)"), each [Letter = _.Groups(1).Value, Number = Number.From(_.Groups(2).Value)])
    
  3. 展开这个列表列,得到每行的字母和数字
  4. 按"Letter"列分组,对"Number"列求和
  5. 最后转置结果,得到P/D/R为列名的表格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:37:39