正则表达式提取、删除重复项并与 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 |
我已经能够使用REGEXEXTRACT
和JOIN
获得部分结果,但它要么只匹配一次,要么返回多个。示例:
# 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 表格中的管道连接的主要内容,如果未能解决你的问题,请参考以下文章