2024年4月WPS正式推出了REGEXP正則函數(shù),這一功能迅速在表格領(lǐng)域引起了廣泛關(guān)注。隨著用戶們對REGEXP函數(shù)的學(xué)習(xí)和使用,其強(qiáng)大的功能逐漸得到了認(rèn)可。然而,在使用過程中,用戶們也遇到了一些問題。為了提升用戶體驗,本次更新不僅修復(fù)了已知的問題,還在原有功能的基礎(chǔ)上增添了新的功能,使得REGEXP函數(shù)更加完善。接下來,我們將深入了解這些改進(jìn)和新增的功能。
升級后的REGEXP函數(shù)語法如下所示。
1、第1個參數(shù)支持?jǐn)?shù)組參數(shù)
正則函數(shù)的時候,第1個參數(shù)是不支持?jǐn)?shù)組的,在使用REGEXP函數(shù)時只能輸入公式后向指定方向填充,或使用MAP、SCAM、REDUCE等函數(shù)才能實現(xiàn)溢出效果,實際使用有些不便。本次升級后,第1個參數(shù)支持?jǐn)?shù)組參數(shù),在第3個參數(shù)匹配類型值為1(判斷)、2(替換)模式下,在一個單元格輸入公式后即可實際溢出。
示例1、判斷手機(jī)號格式是否正確
=REGEXP(A2:A8,'^1[3-9]\d{9}$',1)
示例2、刪除中括號中的漢字后計算表達(dá)式
=EVALUATE(REGEXP(A2:A8,'\[[一-龜]+\]',2))
示例3、提取姓名
=REGEXP(A2:A8,'[一-龜]+')
2、第1個、第2個參數(shù)同時使用數(shù)組參數(shù)
示例4、提取姓名、拼音和數(shù)字
=REGEXP(A2:A8,{'[一-龜]+','[A-z]+','\d+'})
當(dāng)?shù)?個參數(shù)和第2個參數(shù)同時使用數(shù)組時,函數(shù)將兩個參數(shù)的數(shù)組進(jìn)行數(shù)組運算后匹配,使用將兩個參數(shù)的數(shù)組使用&運算符拼接可以直觀的查看數(shù)組運算后的結(jié)果,如下圖所示。
=A11:A17&' - '&{'[一-龜]+','[A-z]+','\d+'}
示例5、提取付款方式對應(yīng)的金額
=IFNA(REGEXP(A2:A10,B1:E1&'\K\d+'),'-')
3、第3個參數(shù)新增加匹配類型
示例6、提取所有姓名
當(dāng)?shù)?個參數(shù)為數(shù)組時,第3個參數(shù)為0或省略,在提取模式時,REGEXP函數(shù)將返回數(shù)組中每個值匹配到結(jié)果的首值,如下圖所示。
=REGEXP(A2:A8,'[一-龜]+')
此次升級第3個參數(shù)增加一個匹配模式3(完整提?。?dāng)設(shè)置此模式時,REGEXP函數(shù)將返回數(shù)組中每個值匹配到的完整結(jié)果(一個三維數(shù)組)需要使用REDUCE、MAP等函數(shù)循環(huán)將完整結(jié)果顯示出來,公式如下圖所示。
=REDUCE(,REGEXP(A2:A8,'[一-龜]+',3),VSTACK)
因每行匹配結(jié)果返回的結(jié)果數(shù)量不同,使用VSTACK函數(shù)拼接后,返回結(jié)果少的行數(shù)將返回錯誤值#N/A補(bǔ)齊數(shù)組,使用IFNA函數(shù)將#N/A顯示成空文本即可,公式如下圖所示。
=IFNA(REDUCE(,REGEXP(A2:A8,'[一-龜]+',3),VSTACK),'')
需要將每個值匹配到的姓名返回到一個單元格中,可以使用MAP函數(shù)循環(huán),ARRAYTOTEXT函數(shù)拼接,公式如下圖所示。
=MAP(REGEXP(A2:A8,'[一-龜]+',3),ARRAYTOTEXT)
如果需要其他分隔符號,可以使用SUBSTITUTE函數(shù)替換,或TEXTJOIN函數(shù)拼接,如下圖所示。
=SUBSTITUTE(MAP(REGEXP(A2:A8,'[一-龜]+',3),ARRAYTOTEXT),', ','、')
=LET(fx,LAMBDA(x,TEXTJOIN('、',,x)),MAP(REGEXP(A2:A8,'[一-龜]+',3),fx))
如果需要將提取到姓名顯示成一行,使用REDUCE函數(shù)循環(huán)后使用TOCOL函數(shù)轉(zhuǎn)換即可,公式如下圖所示。
=TOCOL(REDUCE(,REGEXP(A2:A8,'[一-龜]+',3),VSTACK),3)
在以上幾個示例中,在使用循環(huán)函數(shù)拼接結(jié)果時使用了語法糖簡寫,當(dāng)數(shù)組中的每個都能匹配到結(jié)果時,這樣寫是沒有問題的,如果數(shù)組中的值出現(xiàn)沒有匹配結(jié)果時,REGEXP函數(shù)會返回錯誤值#N/A,導(dǎo)致VSTACK函數(shù)無法拼接,可以使用LAMBDA函數(shù),然后使用IFNA函數(shù)將錯誤值轉(zhuǎn)換成空文本,公式如下圖所示。
=IFNA(REDUCE(,REGEXP(A2:A8,'[一-龜]+',3),LAMBDA(x,y,VSTACK(x,IFNA(y,'')))),'')
如果需要返回一列結(jié)果,公式如下圖所示。
=TOCOL(REDUCE(,REGEXP(A2:A8,'[一-龜]+',3),LAMBDA(x,y,IF(ISNA(y),x,VSTACK(x,y)))),3)
示例7、提取付款方式對應(yīng)的金額(一個單元格內(nèi)有重復(fù)的付款方式)
=MAP(REGEXP(A2:A10,B1:E1&'\K\d+',3),LAMBDA(x,IFNA(SUM(--x),'-')))
7月版本17813已開始灰度更新,已經(jīng)更新到此版本的小伙伴可以開始使用新REGEXP函數(shù)了。
還沒有更新到17813版本的小伙伴如果想提前體驗新REGEXP函數(shù),可以到社區(qū)下載64位內(nèi)測版,64位內(nèi)測版本17726也支持新REGEXP函數(shù)。
需要注意的是,安裝不同位數(shù)的WPS時,無法覆蓋安裝,需要先卸載已經(jīng)安裝的WPS(安裝64位版本需要先卸載32位版本的WPS,安裝回32位時也要先卸載64位版本的WPS)
https://bbs.wps.cn/topic/34523
WPS社區(qū)64位下載地址
聯(lián)系客服