问题陈述: 我想仅在找到时替换文本字符串中的多个值,所有这些都一步完成。 示例:在我的 8000 行列中, 我想在文本字符串中用 *40 替换 @ 符号,例如 [email protected]
我想将“Org”替换为“Com”
仅当文本以 CP-ZI 开头时,我才想将 CP-ZI 替换为 CP-PREF-ZI
仅当文本以 CP-ZE 开头时,我才想用 CP-PREF-ZE 替换 CP-ZE
仅当文本以 CP-ZL 开头时,我才想将 CP-ZL 替换为 CP-PREF-ZL
更详细:我有多个这样的值,需要针对给定列进行替换。我希望能够使用一个查询完成所有替换,而不是创建多个替换查询。
我不想替换整个单元格内容。只有部分文本字符串,如上面示例中共享的那样。
请帮助我构建一个 M 查询来解决这个问题。
我的专栏看起来像这样:
我尝试了以下 M 查询:
= Table.ReplaceValue(#"Remark Replace @ to *40",each [Remark], each if [Remark] = "CP-ZI" then "CP-PREF-ZI" else if [Remark] = "CP-ZE" then "CP-PREF-ZE" else if [Remark] = "CP-ZL" then "CP-PREF-ZL" else if [Remark] = "CP-SX" then "CP-PREF-SX" else if [Remark] = "CP-ET" then "CP-PREF-ET" else if [Remark] = "CP-ZD" then "CP-PREF-ZD" else if [Remark] = "CP-EP" then "CP-PREF-EP" else if [Remark] = "CP-AL" then "CP-PREF-AL" else if [Remark] = "CP-IL" then "CP-PREF-IL" else [Remark], Replacer.ReplaceText,{"Remark"})
然后我尝试了 text.Contains,但这并不能取代任何内容:(
= Table.ReplaceValue(#"Remark Replace CP-ZI to CP-PREF-ZI",each [Remark], each if Text.Contains([Remark], "¤") then "*40" else if Text.Contains([Remark], "@") then "*40" else [Remark], Replacer.ReplaceText,{"Remark"})
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
TransformedTable = Table.TransformColumns(Source, {{"My column", each
let
textWithSymbolReplaced = Text.Replace(_, "@", "*40"),
textWithOrgReplaced = Text.Replace(textWithSymbolReplaced, "Org", "Com"),
textWithCPZIReplaced = if Text.StartsWith(textWithOrgReplaced, "CP-ZI") then Text.Replace(textWithOrgReplaced, "CP-ZI", "CP-PREF-ZI") else textWithOrgReplaced,
textWithCPZEReplaced = if Text.StartsWith(textWithCPZIReplaced, "CP-ZE") then Text.Replace(textWithCPZIReplaced, "CP-ZE", "CP-PREF-ZE") else textWithCPZIReplaced,
textWithCPZLReplaced = if Text.StartsWith(textWithCPZEReplaced, "CP-ZL") then Text.Replace(textWithCPZEReplaced, "CP-ZL", "CP-PREF-ZL") else textWithCPZEReplaced
in
textWithCPZLReplaced
}})
in
TransformedTable