заменить несколько слов в строке определенными словами из списка - PullRequest
0 голосов
/ 28 января 2019

Как я могу, используя M-язык, заменить определенные слова в строке другими конкретными словами, указанными в таблице?

См. Данные моего примера:

enter image description here

Исходный код:

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

1 Ответ

0 голосов
/ 28 января 2019

Это аккуратный вопрос.Вы можете сделать это с некоторыми функциями таблицы и списка 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] и преобразовать ее в списоксписки.Он начинается:

StringToFind  ReplaceWith
------------------------------
&bb           ReplacementForbb
&bb           ccReplacement

Используя Table.ToList, это становится списком из двух элементов (так как таблица имеет две строки).

{"&bb,ReplacementForbb","&cc,ccReplacement"}

Используя Text.Split на запятой, мыможно преобразовать каждый элемент в список, чтобы получить

{{"&bb","ReplacementForbb"},{"&cc","ccReplacement"}}

, то есть форму, которая нам нужна для функции List.ReplaceMatchingItems.

List.ReplaceMatchingItems(
    {"aa", "&bb", "&cc", "dd"},
    {{"&bb","ReplacementForbb"},{"&cc","ccReplacement"}}
)

Это выполняет замену и возвращает список

{"aa","ReplacementForbb","ccReplacement","dd"}

Наконец, мы используем Text.Combine для объединения приведенного выше списка в одну строку.

"aa ReplacementForbb ccReplacement dd"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...