如何在Power Query中使用多动态分隔符拆分CSV数据?
解决CSV动态多分隔符拆分问题
原始CSV数据
\asdhf\revi\Tim2,AK\AK_ADMPH,Allow,Fix
\asdfs1\revi\Tim, John,BUILTIN\Administrators,Allow,None
需求说明
- 先以
,BUILTIN和,AK作为分隔符拆分每条记录,分离出路径段和权限相关段 - 再对拆分后的各段用普通逗号
,做二次拆分,得到结构化结果
Python 代码实现
用正则表达式匹配动态分隔符,拆分后再处理二次拆分:
import re # 原始数据行 data = [ r"\asdhf\revi\Tim2,AK\AK_ADMPH,Allow,Fix", r"\asdfs1\revi\Tim, John,BUILTIN\Administrators,Allow,None" ] # 正则匹配`,AK`或`,BUILTIN`,并保留分隔符 split_re = re.compile(r"(,AK|,BUILTIN)") for line in data: segments = split_re.split(line) # 提取路径部分 path = segments[0].strip() # 拼接权限完整段(分隔符+后续内容) permission_segment = "".join(segments[1:]) # 拆分权限段 permission_parts = [p.strip() for p in permission_segment.split(",") if p] # 组合最终结果 final = [path] + permission_parts print(final)
运行结果
- 第一行输出:
['\\asdhf\\revi\\Tim2', 'AK\\AK_ADMPH', 'Allow', 'Fix'] - 第二行输出:
['\\asdfs1\\revi\\Tim, John', 'BUILTIN\\Administrators', 'Allow', 'None']
Excel 公式实现(适用于365/2021版本)
假设数据在A1单元格:
- 提取路径部分:
=LEFT(A1, MIN(IFERROR(FIND(",AK",A1),999), IFERROR(FIND(",BUILTIN",A1),999))-1) - 提取并拆分权限部分:
=TEXTSPLIT(RIGHT(A1, LEN(A1)-MIN(IFERROR(FIND(",AK",A1),999), IFERROR(FIND(",BUILTIN",A1),999))+1), ",")
将两个公式结合,就能得到拆分后的完整结果。
内容的提问来源于stack exchange,提问作者Chicago1988
相关产品推荐
相关产品推荐

