1

我有两列值,其中第二列包含第一列的子集。我正在解析第一列的部分匹配项:

=query(A:A, "select A where A ends with 'x'")

它工作正常。您将如何修改它以排除共享值?

这是一个例子:

例子

A 是我们从中解析的地方,B 是我们要丢弃的子集,C 是我们想要的结果:

  1. 过滤值以排除 B 列的常见值
  2. 仅返回以 'x' 结尾的值
4

1 回答 1

0

编辑

要解决此问题,您可能首先需要从 B 列中排除值,然后查询结果以仅匹配模式 '%x'。试试这个公式:

=QUERY(FILTER(A:A,REGEXMATCH(A:A,JOIN("|",FILTER(B:B,B:B<>"")))=false), "select Col1 where Col1 like '%x'")

编辑#2

正则表达式的特殊符号是\ + * ? [ ^ ] $ ( ) { } = ! < > | : -

如果您的数据中遇到此类符号,则需要将它们转义\才能使用正则表达式。因此,如果 B 列包含特殊符号,则这种情况下的公式REGEXMATCH将无法正常工作。可能的解决方案是像这样替换它们:[symbol][\symbol]。例如,要补充()

=REGEXREPLACE(text ;"(\(|\)|\*)";"\\$1")

尝试在 C 列中使用此公式来获得结果:

=QUERY(FILTER(A:A,REGEXMATCH(A:A, REGEXREPLACE( JOIN("|",FILTER(B:B,B:B<>""));"(\(|\)|\*)";"\\$1"))=false), "select Col1 where Col1 like '%x'")

原始答案

可能使用not关键字会起作用:

=query(A:A, "select A where not A ends with 'x'")

相同:

=query(A:A, "select A where not A like '%x'")
于 2016-08-04T12:40:55.940 回答