解析列中的值,同时排除其他列中的某些值
Parsing values from a column while excluding certain values from other column
我有两列值,其中第二列包含第一列的子集。我正在解析第一列中的部分匹配项:
=query(A:A, "select A where A ends with 'x'")
它工作正常。您将如何修改它以排除共享值?
这是一个例子:
A 是我们要解析的地方,B 是我们要丢弃的子集,C 是我们想要的结果:
- 过滤值以排除 B 列的常见值
- return 仅以 'x'
结尾的值
编辑
要解决此问题,您可能首先需要从 B 列中排除值,然后查询结果以仅匹配模式“%x”。试试这个公式:
=QUERY(FILTER(A:A,REGEXMATCH(A:A,JOIN("|",FILTER(B:B,B:B<>"")))=false),
"select Col1 where Col1 like '%x'")
编辑 #2
Special symbols 对于正则表达式是 \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
如果您的数据中遇到此类符号,您需要通过\
对它们进行转义,以便使用正则表达式。因此,如果 B 列包含特殊符号,则公式 REGEXMATCH
在这种情况下将无法正常工作。可能的解决方案是像这样替换它们:[symbol]
→ [\symbol]
。例如,要替换 ()
:
=REGEXREPLACE(text ;"(\(|\)|\*)";"\")
尝试在 C 列中使用此公式得出结果:
=QUERY(FILTER(A:A,REGEXMATCH(A:A,
REGEXREPLACE( JOIN("|",FILTER(B:B,B:B<>""));"(\(|\)|\*)";"\"))=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'")
我有两列值,其中第二列包含第一列的子集。我正在解析第一列中的部分匹配项:
=query(A:A, "select A where A ends with 'x'")
它工作正常。您将如何修改它以排除共享值?
这是一个例子:
A 是我们要解析的地方,B 是我们要丢弃的子集,C 是我们想要的结果:
- 过滤值以排除 B 列的常见值
- return 仅以 'x' 结尾的值
编辑
要解决此问题,您可能首先需要从 B 列中排除值,然后查询结果以仅匹配模式“%x”。试试这个公式:
=QUERY(FILTER(A:A,REGEXMATCH(A:A,JOIN("|",FILTER(B:B,B:B<>"")))=false),
"select Col1 where Col1 like '%x'")
编辑 #2
Special symbols 对于正则表达式是 \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
如果您的数据中遇到此类符号,您需要通过\
对它们进行转义,以便使用正则表达式。因此,如果 B 列包含特殊符号,则公式 REGEXMATCH
在这种情况下将无法正常工作。可能的解决方案是像这样替换它们:[symbol]
→ [\symbol]
。例如,要替换 ()
:
=REGEXREPLACE(text ;"(\(|\)|\*)";"\")
尝试在 C 列中使用此公式得出结果:
=QUERY(FILTER(A:A,REGEXMATCH(A:A,
REGEXREPLACE( JOIN("|",FILTER(B:B,B:B<>""));"(\(|\)|\*)";"\"))=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'")