https://zhuanlan.zhihu.com/p/64419762
每當拿到原始數據,不如意十有八九,快速准確的清洗數據也是必備技能,數據清洗正好是 PowerQuery 的強項,本文就來介紹兩個常用的 M 函數:Text.Remove 和 Text.Select。
看到以 Text 開頭的,就知道是文本處理函數,比如原始數據如下,

如果只想要中文名,就是把英文字母都去掉,可以用Text.Remove函數,添加自定義列,
姓名=Text.Remove([客戶],{"A".."Z"})

Text.Remove 的參數有兩個,第一個就是文本,第二個就是要移除的字符,可以是文本或者是文本的列表,{"A".."Z"}就是生成了一個從A到Z的列表,只要是大寫字母,就從客戶的信息中移除。
如果有小寫字母,需要把所有的字母都移除了,把大寫的"Z"替換成小寫的"z"就行了,
姓名=Text.Remove([客戶],{"A".."z"})
如果只想要英文名,要去掉中文名,可以這樣寫,
英文名=Text.Remove([客戶],{"一".."龜"})

Powerquery 的中文字符以 Unicode 連續儲存,"一"的 Unicode最小,正常使用的漢字中,"龜"的 Unicode 最大,因此{"一".."龜"}就包含了所有正常使用的漢字列表,正好利用這個特性,去除了所有的中文字符。
如果有更多種類的文本數據不規則的堆放在一起,比如這樣,

想把聯系方式提取出來,第二個參數還可以這樣寫,
聯系方式=Text.Remove([客戶],{"A".."z","一".."龜"})
把中文字符和英文字符的列表都放到第二個參數中,全部移除。

不過如果字符種類很多,像這樣更加雜亂的,

要提取聯系方式,用Text.Remove 就有點麻煩,各種奇怪的符號種類太多了,編碼也不一定連續。還好有一個 Text.Select 函數專門用來提取的。
Text.Select 函數和 Text.Remove 正好相反,Text.Select 只提取第二個參數中的字符,上圖中提取聯系方式,直接這樣寫,
聯系方式=Text.Select([客戶],{"0".."9"})

直接就可以得到聯系方式信息。
提取各種字符的列表如下,

這兩個函數的都很簡單,需要提取或者移除字符的情況直接套用就可以了。
