我有一列文本,格式如下
特性 |
---|
admin_role=sales_other;;business_type=b2b;;categorisation_complete=yes;;company_reporting_segment_fy22=100+;;engage_usage=medium;;human_support_usage=high;;id=120518_1653500834_40618400058_cs;;job=支持团队协作;;lead_gen_usage=high;;primary_company_industry=软件与技术;;problem=外部协作;;product_area=应用程序与集成;;source_link=https://app.intercom.com/a/apps/tx2p130c/inbox/inbox/all/conversations/40618400058;;subject=unclassified;;theme=slack integration;;type=功能请求 |
business_type=b2c;;categorisation_complete=yes;;company_reporting_segment_fy22=500+;;engage_usage=medium;;human_support_usage=low;;id=001o000000yafi3aan_1653462492_ptbs;;job=omni-channel support;;lead_gen_usage=high;;primary_company_industry=软件与技术;;problem=channel customization;;product_area=apps & integrations;;source_link=n/a;;subject=customization;;theme=channel |
我想将此文本拆分为每项属性对应的一列。如果我按“;;”拆分,并且由于并非所有属性(例如“admin_role”)都适用于每一行,我会得到类似下面的结果:
特性 | |
---|---|
admin_role=sales_other | 业务类型=b2b |
admin_role=其他_其他 | 业务类型=其他 |
业务类型=b2c | 分类完成=是 |
我希望它采用下面的格式,因此有一列“admin_role”,“business_type”,“categorisation_complete”等。
特性 | ||
---|---|---|
admin_role=sales_other | 业务类型=b2b | |
admin_role=其他_其他 | 业务类型=其他 | |
业务类型=b2c | 分类完成=是 |
有办法实现这个吗?
答案1
我在 Excel 中找到了解决方案。可能还有其他更奇特的方法,但这对我来说绝对有效。我发现的缺点是,它依赖于你知道自己在寻找什么术语,而不是自己弄清楚。你可以制作一个非常复杂的公式来计算出所有结果,但如果不太可能改变,你最好自己动手制作这个列表。首先,我像这样设置工作表:
我在顶部列出了标签,在侧面列出了原始文本。屏幕截图显示了仅提取部分内容,=
但我也会向您展示如何提取整个字符串。让我们分解一下这个公式:
=IFERROR(LET(tag,B$1,text,$A2,start,FIND(tag,text)+LEN(tag)+1,end,FIND(";",text,start),MID(text,start,end-start)),"")
该LET()
函数允许您定义变量,然后通过名称引用它们。variable, value
除了最后一个项(即输出)外,其他项都是成对的。这些项如下:
tag,B$1
保存我们正在寻找的标签。将其放在一个地方而不是整个公式中可以更轻松地更新。请注意,列引用是相对的,B
但行是绝对的,$1
因此它会在您复制/粘贴时更新,但不会向下更新。text,$A2
保存我们正在搜索的文本。同样,引用会随着您向下复制/粘贴而更新,但不会向内复制/粘贴。start,FIND(tag,text)+LEN(tag)+1
定义我们想要在结果中显示的字符串的开头。它会在文本中找到标签,然后将标签的长度加上等号的长度。如果您想要整个字符串,请+LEN(tag)+1
从末尾删除。end,FIND(";",text,start)
通过查找字符串开始后的第一个分号来定义字符串的结束。MID(text,start,end-start)
从大输入字符串中提取我们想要的字符串。
最后,我们将整个内容包装起来,这样如果在中找不到IFERROR(~,"")
它就会返回空白。tag
text
设置完成后,您可以复制/粘贴尽可能多的数据行和尽可能多的标签列。
如果您有大量行并且需要帮助获取标签列表,我建议您这样做:
- 将所有数据粘贴到文本编辑器中
- 查找/替换每个
;;
带有换行符的项 - 将数据复制回电子表格
- 使用此函数提取之前的所有内容
=
(假设数据开始于A1
:=LEFT(A1,FIND("=",A1)-1)
- 将该公式复制/粘贴到整个列表中
- 将该列的值复制/粘贴到其他位置,然后删除重复项,或者使用该列上的数据透视表来获取唯一列表,或者
=SORT(UNIQUE(B:B))
在其他地方使用。 - 复制粘贴转置将该唯一列表放入第 1 行,这样您就有了所有列标题。