從圖1所示的數(shù)據(jù)可以看到,需要提取的單號(hào)實(shí)際上就是字符串中的非負(fù)整數(shù)(0和其他正整數(shù)),所以我們完全可以使用正則表達(dá)式進(jìn)行匹配?,F(xiàn)在有很多在線服務(wù)可以直接生成正則表達(dá)式,比如“http://tool.chinaz.com/regex”。
首先復(fù)制A2:A5數(shù)據(jù)區(qū)域,接著打開上述的鏈接,將數(shù)據(jù)粘貼到“在線正則表達(dá)式測(cè)試”下的文本框中,再點(diǎn)擊“常用正則表達(dá)式”下的“正整數(shù)”,然后將自動(dòng)生成的正則表達(dá)式“[1-9] \d*”(不包含引號(hào),下同)修改為“[0 -9] \d*”(因?yàn)樵紨?shù)據(jù)中包含數(shù)字“0”),在下面的窗格中就可以看到匹配結(jié)果,將“匹配到XX條結(jié)果”處的內(nèi)容復(fù)制到剪貼板中(圖2)。
接著返回Excel窗口,右擊B列并依次選擇“設(shè)置單元格格式→數(shù)字→文本”,將其設(shè)置為文本格式(因?yàn)樾枰崛〉膯翁?hào)有超過(guò)15位的數(shù)字,并且數(shù)據(jù)首位包含“0”,設(shè)置為文本格式后不會(huì)顯示錯(cuò)誤),然后將剛剛復(fù)制到的內(nèi)容粘貼到B2:B5數(shù)據(jù)區(qū)域,即可完成數(shù)據(jù)的提?。▓D3)。
對(duì)代碼比較熟悉的朋友,也可以通過(guò)自制VBA來(lái)提取數(shù)據(jù)。在Excel窗口中按下“Alt+F11”組合鍵打開VBA窗口,依次點(diǎn)擊“插入→模塊”,在編輯框中輸入下列的代碼(圖4):
Function ts(rng As Range)
With CreateObject("VBscript.regexp")
. Global = True
. Pattern = "[0-9]\d*" '正則表達(dá)式
If .Execute(rng).Count = 0 T hen
ts = " "
E lse
ts= .Execute(rng)(0)
E nd If
E nd With
End Function
代碼解釋:
這里通過(guò)調(diào)用VBA的正則語(yǔ)法來(lái)生成自定義函數(shù)ts,該函數(shù)會(huì)遍歷查詢所選擇的數(shù)據(jù),然后使用“[0-9]\d*”正則表達(dá)式來(lái)提取符合要求的數(shù)據(jù),此正則表達(dá)式可以通過(guò)“方法1”在線獲取。如果需要執(zhí)行其他的提取操作,可以先用“方法1”介紹的在線服務(wù)生成對(duì)應(yīng)的正則表達(dá)式,再替換圖4中所框選的代碼內(nèi)容就可以了。
現(xiàn)在返回Excel窗口,在C2單元格中輸入公式“=ts(A2)”(即通過(guò)上述代碼生成的函數(shù)),將公式下拉填充到C5單元格,就可以完成數(shù)據(jù)的提取了(圖5)。
編寫VBA有一定的技術(shù)門檻。對(duì)VBA不熟悉的朋友,借助“Excel正則工具”軟件也可以在Excel中提取數(shù)據(jù)。首先到“https://meta.appinn.net/t/topic/26007”下載該軟件。軟件運(yùn)行后會(huì)自動(dòng)最小化到任務(wù)托盤,雙擊程序圖標(biāo)打開程序界面,然后切換到“輔助”選項(xiàng)卡,可以看到很多內(nèi)置的常用正則語(yǔ)法,我們可以通過(guò)設(shè)置熱鍵來(lái)快速調(diào)用(圖6)。
注意:“Excel正則工具”包含了宏代碼,下載和運(yùn)行該軟件時(shí)會(huì)被Windows Defender攔截,所以需要將其添加到排除列表中。
現(xiàn)在返回Excel窗口,按下默認(rèn)熱鍵“Win+Z”調(diào)出“Excel正則工具”的功能界面,在“正則表達(dá)式”處輸入“[0-9]\d*”,在“對(duì)正則結(jié)果進(jìn)行處理:必須含結(jié)果變量$0”處輸入“$0”,其他保持默認(rèn)設(shè)置(圖7)。
然后在Excel窗口中選擇需要提取的數(shù)據(jù)區(qū)域A2:A5,再切換到“Excel正則工具”的功能界面,點(diǎn)擊“正則匹配”按鈕,就可以在B列自動(dòng)提取到所需的數(shù)據(jù)了(圖8)。