用列表中的特定单词替换字符串中的多个单词
replace multiple words in string with specific words from list
如何使用 M 语言将字符串中的特定单词替换为 table 中指定的其他特定单词?
查看我的示例数据:
源代码:
let
someTable = Table.FromColumns({{"aa &bb &cc dd","&ee ff &gg hh &ii"}, {Table.FromColumns({{"&bb","&cc"}, {"ReplacementForbb", "ccReplacement"}},{"StringToFind", "ReplaceWith"}), Table.FromColumns({{"&ee", "&gg","&ii"}, {"OtherReplacementForee", "SomeReplacementForgg", "Replacingii"}},{"StringToFind", "ReplaceWith"})}, {"aa ReplacementForbb ccReplacement dd","OtherReplacementForee ff SomeReplacementForgg hh Replacingii"}},{"OriginalString", "Replacements", "WantedResult"})
in
someTable
这是一个很好的问题。您可以使用一些 table 来执行此操作并将 M 函数列为自定义列,如下所示:
= Text.Combine(
List.ReplaceMatchingItems(
Text.Split([OriginalString], " "),
List.Transform(Table.ToList([Replacements]),
each Text.Split(_,",")
)
),
" ")
我将以第一行为例介绍其工作原理。
[OriginalString]
是"aa &bb &cc dd"
,我们用Text.Split
把它转换成列表。
"aa &bb &cc dd" --Text.Split--> {"aa", "&bb", "&cc", "dd"}
现在我们需要处理 [Replacements]
table 并将其转换为列表列表。它开始于:
StringToFind ReplaceWith
------------------------------
&bb ReplacementForbb
&bb ccReplacement
使用 Table.ToList
这变成了一个双元素列表(因为 table 有两行)。
{"&bb,ReplacementForbb","&cc,ccReplacement"}
在逗号上使用Text.Split
,我们可以将每个元素转化为一个列表得到
{{"&bb","ReplacementForbb"},{"&cc","ccReplacement"}}
这是 List.ReplaceMatchingItems
函数所需的形式。
List.ReplaceMatchingItems(
{"aa", "&bb", "&cc", "dd"},
{{"&bb","ReplacementForbb"},{"&cc","ccReplacement"}}
)
这会进行替换,returns 列表
{"aa","ReplacementForbb","ccReplacement","dd"}
最后,我们使用 Text.Combine
将上面的列表连接成一个字符串。
"aa ReplacementForbb ccReplacement dd"
如何使用 M 语言将字符串中的特定单词替换为 table 中指定的其他特定单词?
查看我的示例数据:
源代码:
let
someTable = Table.FromColumns({{"aa &bb &cc dd","&ee ff &gg hh &ii"}, {Table.FromColumns({{"&bb","&cc"}, {"ReplacementForbb", "ccReplacement"}},{"StringToFind", "ReplaceWith"}), Table.FromColumns({{"&ee", "&gg","&ii"}, {"OtherReplacementForee", "SomeReplacementForgg", "Replacingii"}},{"StringToFind", "ReplaceWith"})}, {"aa ReplacementForbb ccReplacement dd","OtherReplacementForee ff SomeReplacementForgg hh Replacingii"}},{"OriginalString", "Replacements", "WantedResult"})
in
someTable
这是一个很好的问题。您可以使用一些 table 来执行此操作并将 M 函数列为自定义列,如下所示:
= Text.Combine(
List.ReplaceMatchingItems(
Text.Split([OriginalString], " "),
List.Transform(Table.ToList([Replacements]),
each Text.Split(_,",")
)
),
" ")
我将以第一行为例介绍其工作原理。
[OriginalString]
是"aa &bb &cc dd"
,我们用Text.Split
把它转换成列表。
"aa &bb &cc dd" --Text.Split--> {"aa", "&bb", "&cc", "dd"}
现在我们需要处理 [Replacements]
table 并将其转换为列表列表。它开始于:
StringToFind ReplaceWith
------------------------------
&bb ReplacementForbb
&bb ccReplacement
使用 Table.ToList
这变成了一个双元素列表(因为 table 有两行)。
{"&bb,ReplacementForbb","&cc,ccReplacement"}
在逗号上使用Text.Split
,我们可以将每个元素转化为一个列表得到
{{"&bb","ReplacementForbb"},{"&cc","ccReplacement"}}
这是 List.ReplaceMatchingItems
函数所需的形式。
List.ReplaceMatchingItems(
{"aa", "&bb", "&cc", "dd"},
{{"&bb","ReplacementForbb"},{"&cc","ccReplacement"}}
)
这会进行替换,returns 列表
{"aa","ReplacementForbb","ccReplacement","dd"}
最后,我们使用 Text.Combine
将上面的列表连接成一个字符串。
"aa ReplacementForbb ccReplacement dd"