(doar in Power BI se pot rula scripturi in limbajele integrate R si Python, care contin functii regex)
Totusi, se poate extrage un anumit tipar din text, cu putina imaginatie, importanta este construirea unui proces logic.
Pentru tiparul acesta de exemplu, "##-##-##", Interogarea rezultata este:
Cod: Selectaţi tot
let
Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
List1 = List.Transform({0..9}, each Text.From(_)),
ReplacementsList = List.Zip({List1,List.Repeat({1},List.Count(List1))}),
#"Added Custom" = Table.AddColumn(Source, "Matches", (x)=> Text.Combine(List.Transform(Text.PositionOf(Text.Combine(List.Transform(List.ReplaceMatchingItems(Text.ToList(x[Legal]),ReplacementsList),Text.From)),"11-11-11",Occurrence.All),each Text.Range(x[Legal],_,8)),";") )
in
#"Added Custom"
1. Solutia se bazeaza pe inlocuiea oricarui caracter numeric din textul initial cu 1 (sau orice alt text).
List1 = List.Transform({0..9}, each Text.From(_)), returneaza o lista de forma: ={'"0","1","2","3","4","5","6","7","8","9"}
ReplacementsList = List.Zip({List1,List.Repeat({1},List.Count(List1))}), returneaza o lista de liste, care va stabili caracterul initial si cel de inlocuire:
={{"0","1"},{"1","1"},{"2","1"},{"3","1"},{"4","1"},{"5","1"},{"6","1"},{"7","1"},{"8","1"},{"9","1"}}
Dupa inlocuire, textul initial: "16-24-61 E/2NENE TRACT 23-44-56 COMMERCIAL" devine: "11-11-11 E/1NENE TRACT 11-11-11 COMMERCIAL"
2. In urmatoarea etapa de procesare, se identifica pozitia acestui nou tipar 11-11-11 in textul initial: Text.PositionOf(...,Occurence.All) va returna o lista cu toate pozitiile acestui tipar: {0,23} (in baza zero)
3. Pentru fiecare element din lista obtinuta la punctul 2, extragem din textul initial cate 8 caractere (8 este lungimea tiparului cautat):
List.Transform({0,23},each Text.Range("16-24-61 E/2NENE TRACT 23-44-56 COMMERCIAL",_,8)). Rezultatul este o lista de 0 sau mai multe elemente, in functie de numarul de aparitii ale tiparului cautat in textul initial: ={"16-24-61","23-44-56"}
4. In etapa finala, este nevoie de combinat lista obtinuta intr-un singur text:
=Text.Combine({"16-24-61","23-44-56"}, ";"), rezulta: "16-24-61;23-44-56"
In fisierul anexat, exista si interogarea construita in etape separate, pentru o mai usoara intelegere a etapelor. (in interogarea de mai sus, toate etapele de procesare sunt combinate intr-un singur pas)