我在谷歌表格中有一個輸入串列,
| 輸入 | 期望的輸出 | “僅演示不是輸入”重復的字母 |
|---|---|---|
| 戶外 | 匹配 | ○ |
| 狗 | 沒有匹配 | |
| 步 | 沒有匹配 | |
| 蜜蜂 | 匹配 | e |
| 棋盤 | 匹配 | s |
| 食譜 | 匹配 | 好的 |
如何在不拆分字串的情況下驗證字串中的所有字母是否都是唯一的?
到目前為止我的程序
我嘗試
更新
創建查詢熱圖,對其進行過濾并查找后行位置
=INDEX(LAMBDA(a, IF(""<>IFNA(VLOOKUP(ROW(a),
SPLIT(QUERY(QUERY(FLATTEN(ROW(a)&"?"®EXEXTRACT(a, REPT("(.)", LEN(a)))),
"select Col1,count(Col1) where Col1 matches '.*\w $' group by Col1"),
"select Col1 where Col2 > 1", ), "?"), 2, )), "Match", "No Match"))
(A2:INDEX(A:A, MAX((A:A<>"")*ROW(A:A)))))

不區分大小寫將是:
=INDEX(LAMBDA(a, IF(""<>IFNA(VLOOKUP(ROW(a),
SPLIT(QUERY(QUERY(FLATTEN(ROW(a)&"?"&LOWER(REGEXEXTRACT(a, REPT("(.)", LEN(a))))),
"select Col1,count(Col1) where Col1 matches '.*\w $' group by Col1"),
"select Col1 where Col2 > 1", ), "?"), 2, )), "Match", "No Match"))
(A2:INDEX(A:A, MAX((A:A<>"")*ROW(A:A)))))

uj5u.com熱心網友回復:
用途拉姆達,但它是有效的。MAP用和遍歷每一行和每個字符REDUCE。REPLACE單詞中的每個字符并找出長度的差異。如果大于1,不再檢查長度并回傳Match
=MAP(
A2:INDEX(A2:A,COUNTA(A2:A)),
LAMBDA(_,
REDUCE(
"No Match",
SEQUENCE(LEN(_)),
LAMBDA(a,c,
IF(a="Match",a,
IF(
LEN(_)-LEN(
REGEXREPLACE(_,"(?i)"&MID(_,c,1),)
)>1,
"Match",a
)
)
)
)
)
)
如果您確實遇到 lambda 限制,請洗掉MAP并拖動填充REDUCE公式。
=REDUCE("No Match",SEQUENCE(LEN(A2)),LAMBDA(a,c,IF(a="Match",a,IF(LEN(A2)-LEN(REGEXREPLACE(A2, "(?i)"&MID(A2,c,1),))>1,"Match",a))))
后者也是條件格式的首選。
uj5u.com熱心網友回復:
您正在使用單個正則運算式明確要求答案。不幸的是,沒有使用 RE2 對以前的捕獲組進行反向參考這樣的事情。因此,如果您要拼出問題的答案,它將如下所示:
=INDEX(IF(A2:A="","",REGEXMATCH(A2:A,"(?i)(?:a.*a|b.*b|c.*c|d.*d|e.*e|f.*f|g.*g|h.*h|i.*i|j.*j|k.*k|l.*l|m.*m|n.*n|o.*o|p.*p|q.*q|r.*r|s.*s|t.*t|u.*u|v.*v|w.*w|x.*x|y.*y|z.*z)")))
由于您正在尋找不區分大小寫的匹配(?i)修飾符,因此將有助于將選項減少到僅 26 個字母。我想上面可以寫得更簡潔一些:
=INDEX(IF(A2:A="","",REGEXMATCH(A2:A,"(?i)(?:"&TEXTJOIN("|",1,REPLACE(REPT(CHAR(SEQUENCE(26,1,65)),2),2,0,".*"))&")")))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516185.html
下一篇:在哪里存盤腳本配置?
