歡迎轉(zhuǎn)發(fā)和點(diǎn)一下“在看”,文末留言互動(dòng)! 置頂公眾號(hào)或設(shè)為星標(biāo)及時(shí)接收更新不迷路 ![]() 小伙伴們好,這里是EXCEL應(yīng)用之家。今天來和大家分享一道特殊的文本處理題目。 這道題目在我的文件夾中吃灰了好長一段時(shí)間,低版本環(huán)境下我也沒有好的辦法來處理它。原題目是這樣的: 題目要求將源數(shù)據(jù)中多余的計(jì)算符號(hào)去除。如果使用公式那么這道題目是非常不好處理的。 而通過VBA正則方法,這道題目則異常簡單。 01 VBA正則方法 ![]() 完整代碼如下: Sub 去除重復(fù)符號(hào)() Dim i As Integer, arr As Variant, brr As Variant, regex As Object Set regex = CreateObject("vbscript.regexp") arr = Range("A2:A4") ReDim brr(1 To UBound(arr), 1 To 1) With regex .Pattern = "([-+/*])+\1" .Global = True End With For i = 1 To UBound(arr) brr(i, 1) = regex.Replace(arr(i, 1), "$1") Next [B6].Resize(UBound(brr), 1) = brrEnd Sub 主要講一下這段代碼的正則表達(dá)式。 Pattern = "([-+/*])+\1" 由于運(yùn)算符號(hào)有重復(fù),我們統(tǒng)計(jì)一下,所有的運(yùn)算符號(hào)可以歸納為“-+/*”這四個(gè)。它們構(gòu)成一個(gè)字符集合,“+”來對(duì)它們多次重復(fù)的匹配。 “\1”表示回溯引用或者反向引用前面括號(hào)中的內(nèi)容。其含義是,如果前面匹配到“-”,“\1”就和前面匹配到內(nèi)容相同,也是“-”。 For i = 1 To UBound(arr) brr(i, 1) = regex.Replace(arr(i, 1), "$1")Next 使用Replace方法,用“\1”引用的內(nèi)容(單個(gè)的運(yùn)算符)來替代匹配到的(多個(gè)重復(fù)的)運(yùn)算符。 "$1"是指前面反向引用中的內(nèi)容。在VBA中符號(hào)“$”是默認(rèn)符號(hào)。 最重要的東西講完啦,大功告成! |
|