??歷史文章分類專題?? ??最近五篇原創(chuàng)文章??
Excel偷懶的技術(shù)九群讀者提到如何用正則表達(dá)式來判斷成語的結(jié)構(gòu)。 如下圖 現(xiàn)將公式跟大家分享一下,并順帶回顧一下之前介紹的知識點:
先從最簡單的AABB式開始 AABB式 AABB式的意思是,第2個字符跟第1個字符相同,第4個跟第3個相同。 隱含的意思有:第1個、第3個不能相同。 第2個字符要跟第一個字符相同,我們可以將第1個字符設(shè)為分組,然后反向引用它。 公式: =REGEXP(B2,"(.)\1(.)\2",1) 解釋: 括號()可以將幾個字符打包成一個整體【類似四則運算中的括號】,稱為一個分組。這些分組可以依次叫第一分組、第二分組、第三分組……,分別用\1、\2、\3來表示。 比如: 這個公式不太嚴(yán)謹(jǐn),沒有考慮隱含的意思: 第1個、第3個字符不能相同。 因而,會將四個字相同的也判斷為AABB式。 完善后的公式: =REGEXP(B2,"(.)\1(?!\1)(.)\2",1) (?!\1)(.)的意思為: 后面的字符不能是第一組。即:不是第一分組的其他字符, 詳細(xì)解釋見下文的【第4句話】 ABCA式 公式: =REGEXP(B2,"(.)(?!\1)(.)(?!\1)(?!\2)(.)\1",1) 解釋: (?!\1)(?!\2)(.)的意思是既不是第1分組也不是第2分組的其他字符。 這里用了兩個正向否定斷言,請對照下面文章的第5句話“位置可以被多次匹配”來理解: ABCD式 公式: =REGEXP(B2,"(.)(?!\1)(.)(?!\1)(?!\2)(.)(?!\1)(?!\2)(?!\3)(.)",1) 其他結(jié)構(gòu) ABAC式: =REGEXP(B2,"(.)(?!\1)(.)\1(?!\1)(?!\2).",1) ABCB式: =REGEXP(B2,"(.)(?!\1)(.)(?!\1)(?!\2)(.)\2",1) ABBC式: =REGEXP(B2,"(.)(?!\1)(.)\2(?!\1)(?!\2)(.)",1) ABAB式: =REGEXP(B2,"^(.)(?!\1)(.)\1\2",1) AABC式: =REGEXP(B2,"^(.)\1(?!\1)(.)(?!\1)(?!\2)(.)",1) ABCC式: =REGEXP(B2,"^(.)(?!\1)(.)(?!\1)(?!\2)(.)\3",1) 更多的正則表達(dá)式應(yīng)用,請點擊下面的合集 另: 千成文給出了用普通函數(shù)一次性判斷所有結(jié)構(gòu)的公式,思路很巧妙,貼上來供大家參考。 公式: =CONCAT(CHAR(64+LET(T,MID(B2,ROW($1:$4),1),MATCH(T,UNIQUE(T),0)))) 如需加入RPA群,請備注RPA 如需加入圖表群,請備注圖表 |
|
來自: 偷懶的技術(shù) > 《待分類》