如何在Power Query中提取數(shù)據(jù)笋敞?——文本篇

平時我們經(jīng)常用到需要根據(jù)一定的需求在數(shù)據(jù)中把符合需求的數(shù)據(jù)提取出來,那我們看下在Power Query中是如何進行操作的挪凑。

我們知道孕索,在Power Query中數(shù)據(jù)是有多種類型的逛艰,那提取的方式也是各不一樣躏碳。

以下是一張整體的有關(guān)數(shù)據(jù)提取可能涉及到的函數(shù)集∩⒉溃可以點擊查看大圖

我們今天來主要看下文本中的數(shù)據(jù)提取菇绵。

我們知道在Power Query中對于數(shù)據(jù)類型規(guī)定的比較嚴格,所以我們在使用函數(shù)的時候也要時刻注意著數(shù)據(jù)類型镇眷,包括函數(shù)參數(shù)的類型咬最,函數(shù)生成的最終類型。

在Power Query菜單中也可以進行部分操作欠动。

從頭開始提扔牢凇(首字符)

Text.Start(string asnullable text, count asnumber) asnullable text

此函數(shù)有2個參數(shù)惑申,第1個參數(shù)是可為空的文本字符串,第2個參數(shù)是整數(shù)數(shù)字翅雏,最終生成的是可為空的文本格式圈驼。

這個函數(shù)類似Excel中的Left函數(shù),從左邊開始提取指定位數(shù)的字符望几。

例:

Text.Start("abc",1)=a

Text.Start("123",2)="12"

從尾開始提燃ù唷(結(jié)尾字符)

Text.End(string asnullable text, numChars asnumber) asnullable text

此函數(shù)和Text.Start類似,相當于Excel中的Right函數(shù)橄抹,從右邊開始提取指定位數(shù)的字符靴迫。

例:

Text.End("abc",1)=c

Text.End("123",2)="23"

從指定位置開始提取(范圍)

Text.Range(text asnullable text, offset asnumber,optionalcount asnullable number) asnullabel text

一共有3個參數(shù)楼誓,第3參數(shù)為可選項玉锌。

這個函數(shù)類似Excel中的Mid,但是有幾個地方需需要注意慌随。

參數(shù)從0開始芬沉,而不是從1開始。

(第2參數(shù)+第3參數(shù))<=文本字符數(shù)

例:

Text.Range("abc",0)=abc

Text.Range("abc",1)=bc

Text.Range("abc",0,1)=a

Text.Range("abc",1,2)=bc

Text.Range("abc",4)/?Text.Range("abc",1,3)=Error

Text.Middle(text asnullable text, start asnumber,optionalcount asnullable number) asnullable text

和Text.Range相比阁猜,優(yōu)點是不需要考慮(第2參數(shù)+第3參數(shù))<=文本字符數(shù)這個條件丸逸。

Text.BeforeDelimiter(text asnullable text, delimiteras text,optionalindex asany) asany

(分隔符之前的文本)提取指定文本之前的數(shù)據(jù)。

例:

Text.BeforeDelimiter("abc123abc","b")=a

Text.BeforeDelimiter("abc123abc","c",1)=abc123ab

Text.BeforeDelimiter("abc123abcabc","b",{2,1})=a

解釋:從文本中剃袍,根據(jù)字符"b"黄刚,從最后開始查找,并跳過2次找到的位置再提取之前的文本民效。{}列表里面憔维,第一個2代表跳過的次數(shù),第二個1代表的是從后往前數(shù)畏邢,如果是從前往后數(shù)則是0业扒。

Text.AfterDelimiter(text asnullable text, delimiteras text,optionalindex asany) asany

(分隔符之后的文本提取)指定文本之后的數(shù)據(jù)舒萎。

Text.BetweenDelimiters(text asnullable text, startDelimiter astext, endDelimiters astext,optionalstartIndex asany,optioanlendIndex asany) asany

(分隔符之間的文本)提取指定文本之間的數(shù)據(jù)程储。

根據(jù)條件提取

Text.Remove(text asnullable text, removeChars asany) asnullabel text

我們注意到,在這個函數(shù)里面臂寝,第2參數(shù)是any章鲤,那就代表可以是其他類型,例如list等咆贬。我們可以通過這個特性败徊,批量從文本中刪除指定數(shù)據(jù)并提取剩余數(shù)據(jù)。

例如:

Text.Remove("abc123", "123")=abc

Text.Remove("abc123",{"a","b","c"})="123"

我們之前了解到list的生成可以通過Unicode代碼掏缎,可以參考此文章(如何理解Power Query中的“#”轉(zhuǎn)義字符皱蹦?)煤杀。

例如我們需要刪除文本中所有的數(shù)字就可以使用列表{0..9},如果刪除所有的小寫字母{"a".."z"}

刪除全小寫字母=Text.Remove("abc123",{"a".."z"})="123"

如果要全部去掉數(shù)字,則還需添加一步轉(zhuǎn)換沪哺,因為{0..9}生成的是數(shù)字格式怜珍,但是我們要刪除的是文本格式,所以需要用到List.Transform函數(shù)進行轉(zhuǎn)換凤粗。

刪除全部數(shù)字=Text.Remove("abc123", List.Transform({0..9}, Text.From))="abc"

Text.RemoveRange(text asnullable text, offset asnumber,optionalcount asnullable number) asnullable text

和Text.Remove比酥泛,雖然都是刪除,但是性質(zhì)完全不一樣嫌拣∪嵩可以參考Text.Range,只不過一個是提取异逐,一個是刪除捶索。

另外請注意,其參數(shù)是number灰瞻,不是any腥例。

例:

Text.RemoveRange("abc123",1)="ac123"

Text.RemoveRange("abc123",0,2)="c123"

那會問,如果想要在指定位置內(nèi)批量刪除字符要如何處理呢酝润?

思路都是一樣的燎竖,我們先通過提取,然后再通過批量刪除即可要销。

例:

Text.Remove(Text.Range("abc123abc",5,4),{"a".."z"})=3

再延伸下思路构回,我們注意到很多在提取的時候都需要用到Number的數(shù)字進行定位,那我們?nèi)绾芜M行定位又是一個課題了疏咐。

例如涉及到定位的函數(shù)纤掸,Text.Length,Text.PositionOf等函數(shù)進行定位浑塞,甚至List.Sum,List.Count這類函數(shù)作為值也可以進行定位借跪,具體要看實例靈活應用。

Text.Select(text as?nullable text, selectChars as?any) as?nullable text

根據(jù)指定條件提取文本酌壕。使用方法可以參考Text.Remove掏愁,只不過一個是提取,一個是刪除仅孩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末托猩,一起剝皮案震驚了整個濱河市印蓖,隨后出現(xiàn)的幾起案子辽慕,更是在濱河造成了極大的恐慌,老刑警劉巖赦肃,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溅蛉,死亡現(xiàn)場離奇詭異公浪,居然都是意外死亡,警方通過查閱死者的電腦和手機船侧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門欠气,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镜撩,你說我怎么就攤上這事预柒。” “怎么了袁梗?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵宜鸯,是天一觀的道長。 經(jīng)常有香客問我遮怜,道長淋袖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任锯梁,我火速辦了婚禮即碗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陌凳。我一直安慰自己剥懒,他們只是感情好,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布合敦。 她就那樣靜靜地躺著蕊肥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛤肌。 梳的紋絲不亂的頭發(fā)上壁却,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機與錄音裸准,去河邊找鬼展东。 笑死,一個胖子當著我的面吹牛炒俱,可吹牛的內(nèi)容都是我干的盐肃。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼权悟,長吁一口氣:“原來是場噩夢啊……” “哼砸王!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峦阁,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤谦铃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后榔昔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驹闰,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡瘪菌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘹朗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片师妙。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屹培,靈堂內(nèi)的尸體忽然破棺而出默穴,到底是詐尸還是另有隱情,我是刑警寧澤褪秀,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布壁顶,位于F島的核電站,受9級特大地震影響溜歪,放射性物質(zhì)發(fā)生泄漏若专。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一蝴猪、第九天 我趴在偏房一處隱蔽的房頂上張望调衰。 院中可真熱鬧,春花似錦自阱、人聲如沸嚎莉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趋箩。三九已至,卻和暖如春加派,著一層夾襖步出監(jiān)牢的瞬間叫确,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工芍锦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竹勉,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓娄琉,卻偏偏與公主長得像次乓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孽水,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容