Power Query - 从列表中替换字符串中的多个子字符串

Power Query - replace multiple substrings in a string from a list

我有一列包含像这样的短语,我需要从像 ;,:! 这样的字符中清除它们等等,用 space 替换它们(以避免单词连接)。

输入和输出示例:

"bla.blabla X&!:blablabla"需要变成"bla blabla X blablabla"

而且我找不到简单易行的解决方案!

source = data,  //which has Oldcol column with data to clean
CharsToRemove = { ".", "'", ":", ";", "!", "?", "<", ">", "{", "}", "[", "]", "'", "`", "^", """", "&", "-","/", "\", "|","(", ")", "," , "=", "+"}, 
//line below is where I'd like to get to, it is not working
Newcol = Table.AddColumn(source , "NEWCOL", each 
             Text.Replace([Oldcol], CharsToRemove , " ") ) 

基本上,我正在寻找最后一行工作。

嵌套替换语句的选项有效,但它很笨重,因为要替换的实际字符列表很长,而且它出现在代码的许多部分。 我可以把它变成函数,但我很想知道是否有办法避免这一切,并且只需要一个智能线路就可以完成这项工作?

提前致谢

对于多个文本替换,您可以使用List.Accumulate,例如

let
    CharsToRemove = Text.ToList(".':;!?<>{}[]'`^""&-/\|(),=+"),
    Source = #table({"Oldcol"},{{"bla.blabla X&!:blablabla"}}),
    Cleaned = Table.TransformColumns(Source,{{"Oldcol", each List.Accumulate(CharsToRemove,_,(String,Remove) => Text.Replace(String,Remove," "))}})
in
    Cleaned

对于多列,您可以使用Table.ReplaceValue。

let
    CharsToRemove = Text.ToList(".':;!?<>{}[]'`^""&-/\|(),=+"),
    Source = #table({"Oldcol1", "Oldcol2"},{{"bla.blabla X&!:blablabla","bla.blabla X&!:blablabla"}}),
    Cleaned = List.Accumulate(CharsToRemove,Source,(Table,Remove) => Table.ReplaceValue(Table,Remove," ",Replacer.ReplaceText,{"Oldcol1","Oldcol2"}))
in
    Cleaned