洗澡時(shí)總會(huì)有靈感蹦出场躯,但是程先生耐不了淋浴的悶熱,于是也早早地蹦出了衛(wèi)生間旅挤。
原本這次打算分享PDF轉(zhuǎn)Word的萬(wàn)能神器踢关,但是被淋浴沖昏頭腦之后,還是趁熱在空調(diào)下科普本次的洗白白靈感:如何用正則表達(dá)式輔助Excel進(jìn)行數(shù)據(jù)預(yù)處理粘茄。
啥签舞,有點(diǎn)語(yǔ)無(wú)倫次?柒瓣!
Excel蝦/俠應(yīng)該知道儒搭,從txt文件中,直接拷貝以“Tab制表符(看芙贫,人家名字就叫制表符)”分隔的文本到Excel之后搂鲫,數(shù)據(jù)會(huì)老老實(shí)實(shí)、規(guī)規(guī)矩矩按行列落在它本應(yīng)所處的位置磺平。
但如果數(shù)據(jù)本身并非以Tab制表符分隔魂仍,可能是以逗號(hào)分隔(Excel所兼容的.csv文件倒是支持以英文逗號(hào)分隔數(shù)據(jù)列),也可能是以(多個(gè))空格分隔拣挪,或者文本行是更為復(fù)雜的JSON數(shù)據(jù)格式(額擦酌,這個(gè)怎么解釋呢,大家就理解為長(zhǎng)得很“丑”的文本數(shù)據(jù)吧菠劝,類似這種:{ "firstName": "Xiansheng", "lastName":"Chen", "email": "idealRetail@163.com" })赊舶;又或者說(shuō),你想以某種文本規(guī)律去處理(提取闸英、清除)文本行數(shù)據(jù)锯岖,例如把如圖所示文本中的“第X大美食”給清除掉;還有其它很多種復(fù)雜的場(chǎng)景(夜深腦癱甫何,程先生一時(shí)半會(huì)兒舉不動(dòng)栗子啦)出吹,特別是你從網(wǎng)上拷貝、下載辙喂、抓取了某些數(shù)據(jù)捶牢,你又不會(huì)編程處理或者說(shuō)沒(méi)有程序員男朋友時(shí)鸠珠,正則表達(dá)式將會(huì)是你清洗數(shù)據(jù)的一大利器。
好啦秋麸,進(jìn)入實(shí)操階段:
首先下載個(gè)支持正則表達(dá)式的文本編輯器渐排,例如EditPlus(推薦)、Ultraedit灸蟆、Sublime等驯耻,然后拖入文本文件到編輯器內(nèi)打開(kāi)文件之后按Ctrl+H就可以進(jìn)行正則查找、替換啦炒考。EditPlus的操作界面如下:
正則表達(dá)式(Regular Expression)可缚,又稱規(guī)則表達(dá)式,因此斋枢,它有一系列的規(guī)則帘靡,有人還把它寫(xiě)成了比拳頭還厚的書(shū)- -,因此今天的科普文章不可能覆蓋所有的case瓤帚。程先生拋磚引玉描姚,舉例說(shuō)明常見(jiàn)的情景吧。
- 連續(xù)的空格替換為Tab制表符(這樣戈次,拷貝到Excel中的文本就不會(huì)擠在同一格啦):
Find: [ ]*
Replace: \t - 以句號(hào)作為行末進(jìn)行換行(比如對(duì)詩(shī)歌文本進(jìn)行格式化處理轩勘,每一行都是完整的一句話):
Find: 。
Replace: 朝扼。\n - 如上所述赃阀,清除所有“第X大美食:”文字:
Find: 第.*大美食:
Replace: - 查找所有的電話號(hào)碼/手機(jī)號(hào)碼:
Find: [0-9]{11} (手機(jī)號(hào)碼:xxxxxxxxxxx)
Find: [0-9]{3,4}-[0-9]{8} (座機(jī):xxxx-xxxxxxxx) - 把上述的JSON數(shù)據(jù)({ "firstName": "Xiansheng", "lastName":"Chen", "email": "idealRetail@163.com" })格式化為excel列字段:
Find: .*first(匹配任何字符開(kāi)頭且連著first字樣的文本)
Replace: first(清除行首的括號(hào)引號(hào))
Find: " }(匹配"后接一空格及}符號(hào)的文本霎肯,}需轉(zhuǎn)義)
Replace:(清除行末的括號(hào)引號(hào))
Find: ":[ ]*"(匹配"之間含:及若干個(gè)空格的文本)
Replace: \t(替換冒號(hào)分隔為制表符分隔)
Find: ", "(匹配"之間含,及一個(gè)空格的文本)
Replace: \t(替換冒號(hào)分隔為制表符分隔)
啊擎颖,快沒(méi)電了……
作為正則表達(dá)式的科普,看到這兒對(duì)自己是否適用观游,自己又是否感興趣也差不多了然于心了搂捧。那么,我們留言見(jiàn)懂缕?
晚安?_?
程先生其實(shí)不姓程允跑,他是個(gè)程序員。
他很樂(lè)意與你分享許多硬貨和一點(diǎn)軟文搪柑,并提供善解人意的技術(shù)咨詢聋丝。
歡迎關(guān)注,歡迎簡(jiǎn)信工碾。