如何在Excel中识别2个字符串中的相同字符?

vlju58qv  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(723)

假设我在单元格A1中有ABC,在单元格B1中有XaA
考虑到大写和小写,我想认识到A存在于两个字符串中。
下面是我尝试使用的公式:

=INDEX(FLATTEN(FILTER(FLATTEN(FILTER(REGEXEXTRACT(TO_TEXT(E1),
REPT("(.)", LEN(E1))),REGEXEXTRACT(TO_TEXT(E1), 
REPT("(.)", LEN(E1)))<>"")),
FLATTEN(FILTER(REGEXEXTRACT(TO_TEXT(E1), 
REPT("(.)", LEN(E1))),REGEXEXTRACT(TO_TEXT(E1), 
REPT("(.)", LEN(E1)))<>""))<>"")&""&TRANSPOSE
(FILTER(FLATTEN(FILTER(REGEXEXTRACT(TO_TEXT(E2), 
REPT("(.)", LEN(E2))),REGEXEXTRACT(TO_TEXT(E2), 
REPT("(.)", LEN(E2)))<>"")), FLATTEN(FILTER(REGEXEXTRACT(TO_TEXT(E2), 
REPT("(.)", LEN(E2))),REGEXEXTRACT(TO_TEXT(E2), 
REPT("(.)", LEN(E2)))<>""))<>""))))

但是没有用。
我如何使用Excel或Google工作表功能来实现这一点?

  • 谢谢-谢谢
n3ipq98p

n3ipq98p1#

另一种方法...(如果您有需要在regex中转义的字符,则很方便)
如果你解开每一个:

=REGEXEXTRACT(A20, REPT("(.)", LEN(A20)))

然后您可以对其进行筛选:

=FILTER(C20:E20, COUNTIF(C21:E21, C20:E20))

一步到位:

=LAMBDA(a, b, FILTER(a, COUNTIF(b, a)))(
 REGEXEXTRACT(A20, REPT("(.)", LEN(A20))), 
 REGEXEXTRACT(B20, REPT("(.)", LEN(B20))))

更新

为了区分B/N小写和大写,尝试频谱偏移:

=IFERROR(LAMBDA(a, b, FILTER(a, COUNTIF(
 IF((CODE(b)>96)*(CODE(b)<122), CHAR(CODE(b)+9301), b), 
 IF((CODE(a)>96)*(CODE(a)<122), CHAR(CODE(a)+9301), a))))(
 REGEXEXTRACT(A20, REPT("(.)", LEN(A20))), 
 REGEXEXTRACT(B20, REPT("(.)", LEN(B20)))), "no match")

bt1cpqcv

bt1cpqcv2#

使用regexmatch()regexextract(),如下所示:
=regexmatch( B1, join( "|", unique( transpose( regexextract(A1, rept("(.)", len(A1))) ) ) ) )
如果要列出匹配的字符,而不仅仅是获取true/false结果,或者A1中的值可能包含一个或多个特殊字符.*+?^${}()|[]\,请使用以下较长的公式:

=lambda( 
  a, b, 
  iferror( 
    filter( b, 
      regexmatch( b, 
        join( "|", 
          regexreplace( 
            unique(transpose(a)), 
            "[.*+?^${}()|[\]\\]", "\\$0" 
          ) 
        ) 
      ) 
    ), 
    "(no matches)" 
  ) 
)( 
  regexextract(A1, rept("(.)", len(A1))), 
  regexextract(B1, rept("(.)", len(B1))) 
)

相关问题