Power Query替换条件语句失效求助:多空格匹配异常
Power Query Table.ReplaceValue 失效问题排查与解决
问题1:双空格文本无法替换
原因
大概率是你用了精确匹配整个字段的替换逻辑,或是仅针对固定双空格做单次替换(无法覆盖多连续空格场景);另外如果未指定正确的替换器(Replacer),默认的精确匹配规则不会处理单元格内的部分文本替换。
解决方案
用Replacer.ReplaceText结合正则表达式,一次性替换所有连续空格为单空格,覆盖所有多空格场景:
Table.ReplaceValue( 你的数据源表, "DocumentItems_Vendor", @"\s+", // 匹配1个及以上连续空白字符(含空格、制表符等) " ", Replacer.ReplaceText, {"DocumentItems_Vendor"} )
若仅需替换双空格,也可直接将查找内容写为" ",但正则方式适用性更广。
问题2:包含"ANIXTER"的文本未替换为"ANIXTER"
原因
你可能设置的是**精确匹配整个字段等于特定值(如"ANIXTER DALLAS")**才执行替换,而非匹配所有包含"ANIXTER"的字段;或是替换逻辑未针对性提取"ANIXTER"部分,导致规则不生效。
解决方案
分两种场景提供代码:
- 只要字段包含"ANIXTER",直接替换为"ANIXTER":
Table.ReplaceValue( 你的数据源表, each [DocumentItems_Vendor], each if Text.Contains([DocumentItems_Vendor], "ANIXTER") then "ANIXTER" else [DocumentItems_Vendor], Replacer.ReplaceValue, {"DocumentItems_Vendor"} )
- 提取"ANIXTER"并去掉后续所有内容(如"ANIXTER DALLAS"转"ANIXTER"):
// 方式1:提取第一个空格前的内容 Table.ReplaceValue( 你的数据源表, "DocumentItems_Vendor", each Text.BeforeDelimiter(Text.Trim([DocumentItems_Vendor]), " ", 1), Replacer.ReplaceValue, {"DocumentItems_Vendor"} ) // 方式2:正则匹配提取ANIXTER Table.ReplaceValue( 你的数据源表, "DocumentItems_Vendor", @"(ANIXTER).*", "$1", Replacer.ReplaceText, {"DocumentItems_Vendor"} )
注意事项
- 区分替换器参数:
Replacer.ReplaceText用于单元格内部分文本替换,Replacer.ReplaceValue用于精确匹配整个单元格值替换,不要混用。 - 若存在大小写差异,可先用
Text.Lower或Text.Upper统一文本格式后再执行匹配。
内容的提问来源于stack exchange,提问作者Dj.cho
相关产品推荐
相关产品推荐

