Power Query - удаление текста между разделителями - PullRequest
0 голосов
/ 11 марта 2020

Я хочу удалить любой текст между "()", включая "()". Есть много различий, когда я не могу просто найти и заменить. Небольшой пример: AB C (1)
EFG (2)
XYZ (1, 2)
I * sh для отображения
AB C
EFG
XYZ

Нашел этот пост, но код функции больше не виден (по крайней мере, во всех браузерах, которые я пробовал). https://www.thebiccountant.com/2019/07/15/text-removebetweendelimiters-function-for-power-bi-and-power-query/

Я скопировал код из одного из комментариев, и он, кажется, работает нормально, однако, когда я вызываю функцию в столбце, я получаю все ошибки со следующим: «Выражение .Error: Указанный параметр индекса недействителен. Подробности: Список "

У кого-нибудь есть код от автора? Или знаете, что я делаю не так?

Вот код из нового пользовательского столбца после запуска функции:

 Table.AddColumn(#"Changed Type1", "N", each Query1([#"NEC(s)"], "(", ")", 1, null))

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Есть ли текст справа от)?

Если нет, просто разбейте столбец на пользовательский разделитель (крайний левый, затем удалите 2-й столбец

= Table.SplitColumn(Source, "Column1", Splitter.SplitTextByEachDelimiter({"("}, QuoteStyle.Csv, false), {"Column1.1", "Column1.2"})

ИЛИ преобразуйте столбец, чтобы удалить что-либо после начального (

= Table.TransformColumns(Source,{{"Column1", each Text.Start(_,Text.PositionOf(_,"(")), type text}})
0 голосов
/ 11 марта 2020

Вот другое решение, использующее рекурсию.

(txt as text) =>
[ 
fnRemoveFirstTag = (DELIM as text)=>
    let
        OpeningTag = Text.PositionOf(DELIM,"("),
        ClosingTag = Text.PositionOf(DELIM,")"),
        Output = 
            if OpeningTag = -1 
            then DELIM 
            else Text.RemoveRange(DELIM,OpeningTag,ClosingTag-OpeningTag+1)
    in
        Output,
fnRemoveDELIM = (y as text)=>
    if fnRemoveFirstTag(y) = y
    then y 
    else @fnRemoveDELIM(fnRemoveFirstTag(y)),
Output = @fnRemoveDELIM(txt) 
][Output]

Это работает с вашими примерами данных и должно работать, если в вашей строке более одного набора подстрок, разделенных скобками.

enter image description here

Скопировано бесстыдно и минимально изменено из Power Query: удалить весь текст между разделителями

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