需要从分隔的Excel字符串中删除不匹配的文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要从分隔的Excel字符串中删除不匹配的文本相关的知识,希望对你有一定的参考价值。

我有一个Excel数据库查询来获取分配给每个用户的所有RBAC用户角色,并且数据库返回由每个用户角色之间用&(和号)分隔的字符串,例如:

&Admin&Supervisor&ViewReports&WriteReports&

我的查询过滤只有匹配字符串的记录,让我们说它是Reports。但是,它仍然返回匹配用户的完整用户角色列表,在这种情况下,某些用户分配了> 10个角色,这使得表看起来非常混乱,不适合打印。

我可以手动清理每一行,但是它们有很多,而且由于这将会定期运行,我想知道是否有一个好的Excel公式或VBS方法来分割字符串的分隔部分而且只有保留符合字符串条件的那些。

我知道“文本到列”及其使用分隔符的能力,但它只是吐出大量的列并使事情变得更糟。我已经完成了几次关于在Excel中清理分隔字符串的搜索但是找不到与我的情况类似的任何结果:需要拆分分隔字符串并执行一些RegEx-esque以仅保留与模式匹配的部分。

理想情况下,我想将清理后的结果保存在单个单元格中,因此上面的示例&Admin&Supervisor&ViewReports&WriteReports&将如下所示:

ViewReports WriteReports

要么

ViewReports,WriteReports

或类似的,在一个单元格中。真的不太挑剔格式化,只需要字符串的非相关部分消失。

答案

您可以使用trim,mid和substitute的组合来查找您的值,以便使用上面的示例:

如果您有一个空白的Excel工作表,并将您的示例添加到单元格A3,然后将1,2,3和4放在单元格B2,C2,D2,E2中,则使用将此公式复制到单元格B3中:

=TRIM(MID(SUBSTITUTE($A3,"&",REPT(" ",LEN($A3))),(B$2-1)*LEN($A3)+1,LEN($A3)))

这应该给你值“管理员”。

之后只需将公式拉到右侧,您将获得示例中的所有4个值。如果您需要更多解释,请告诉我。

有关此等式的更多信息,请参阅网页:https://exceljet.net/formula/split-text-with-delimiter

另一答案

此公式适用于Excel / Office 365.由于2016年出现的TEXTJOIN函数,它在早期版本中无效。

  • 假设数据是如上所述的简单字符串(即,不是可能包含所创建节点的重复的XML文档。如果是这种情况,则存在另一种分割我们可以使用的字符串的方法)。
  • FILTERXML分割&符号上的字符串
  • 使用INDEX函数的变体返回匹配部分的数组
  • TEXTJOIN连接这些部分

=TEXTJOIN(" ",TRUE,INDEX(FILTERXML("<t><s>" & SUBSTITUTE(A1,"&","</s><s>")&"</s></t>","//s"),N(IF(1,{3,5}))))

…N(IF(1,{3,5}))…部分是如何从INDEX函数返回值数组。在这种情况下,35指的是第三个和第五个&符号之前的值。请注意,1会返回错误,因为在第一个&符号之前没有任何内容。

您可以返回任何您想要的元素。您只需要知道(或使用MATCH函数计算)正确的索引号。

请注意,使用TEXTJOIN,您可以指定所需的分隔符。我指定了space,但你可以指定comma或任何东西。

enter image description here

以上是关于需要从分隔的Excel字符串中删除不匹配的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何将制表符分隔的文本文件导入 Excel?

从excel中的字符串中删除单词的最简单方法是啥?

从正则表达式匹配中删除最后一个字符[重复]

LINUX删除指定字段不匹配的行脚本怎么写

在excel单元格中的复杂分隔符之间提取文本

正则表达式从字符串中精确匹配 11 位电话号码并从 C# 中的匹配中删除连字符(-)