正则表达式提取、删除重复项并与 Google 表格中的管道连接

Posted

技术标签:

【中文标题】正则表达式提取、删除重复项并与 Google 表格中的管道连接【英文标题】:Regex extract, remove duplicates, and join with a pipe in Google Sheets 【发布时间】:2021-12-02 08:58:34 【问题描述】:

我有如下数据行:

Cat A>Subcat A|Cat A>Subcat B
Cat A>Subcat C|Cat B>Subcat A|Cat B>Subcat C|Cat C

你会注意到它基本上是一个由管道|分隔的父类别和子类别的列表

我需要通过以下两种方式从每一行中提取数据:

    获取所有父类别并用管道分隔它们|(删除重复项)。 获取所有子类别名称并用管道 | 分隔它们(删除重复项)。

从提供的前两行中,结果应如下所示:

String Parents (Result 1) Children (Result 2)
Cat A>Subcat A|Cat A>Subcat B Cat A Subcat A|Subcat B
Cat A>Subcat C|Cat B>Subcat A|Cat B>Subcat C|Cat C Cat A|Cat B|Cat C Subcat C|Subcat A

我已经能够使用REGEXEXTRACTJOIN 获得部分结果,但它要么只匹配一次,要么返回多个。示例:

# Returns the first instance of "Cat A" only
=REGEXEXTRACT(H2,"(.*?)>.*?\|")

我正在寻求帮助,以创建两个可以获得所需“结果 1”和“结果 2”的正则表达式模式

【问题讨论】:

【参考方案1】:

尝试:

=ARRAYFORMULA(REGEXREPLACE(TRIM(SUBSTITUTE(TRANSPOSE(QUERY(QUERY(QUERY(
 IFNA(SPLIT(UNIQUE(FLATTEN(ROW(A1:A2)&"×"&
 REGEXREPLACE(REGEXEXTRACT(SPLIT(A1:A2&">", "|", 1), "(.*)>"), "(>.*)", )))&"|", "×")), 
 "select max(Col2) 
  where Col1 is not null 
  group by Col2 
  pivot Col1"), 
 "offset 1", 0),,9^9)), "| ", "|")), "\|$", ))

和:

=ARRAYFORMULA(REGEXREPLACE(TRIM(SUBSTITUTE(TRANSPOSE(TRIM(QUERY(QUERY(QUERY(
 IFNA(SPLIT(UNIQUE(FLATTEN(ROW(A1:A2)&"×"&
 REGEXREPLACE(REGEXEXTRACT(SPLIT(A1:A2, "|", 1), ">(.*)"), "(>.*)", )))&"|", "×")), 
 "select max(Col2) 
  where Col1 is not null 
  group by Col2 
  pivot Col1"), 
 "offset 1", 0),,9^9))), "| ", "|")), "\|$", ))

【讨论】:

有趣,player0:我刚来发布完全相同的解决方案。唯一的区别是我选择的临时加入/拆分字符。伟大的思想等等...... 发布此消息时,我对自己说:“我敢打赌,这是 player0 在公园里散步。”我是对的。你又搞定了我的朋友。我需要停止寻找特定于正则表达式的解决方案,而只是用查询来破解它:) 谢谢!

以上是关于正则表达式提取、删除重复项并与 Google 表格中的管道连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在Google表格中获取某些值后如何进行正则表达式提取

Excel删除重复数据及用公式筛选重复项并标记颜色突出显示

删除“case when”中的重复项并计算步骤之间的平均值

在 Swift 中删除字符串中的链接的正则表达式 [重复]

C#ArrayList重复数据删除

SQL SERVER 2005删除重复数据