0

Problemumgehung für das extractx() “g” flag

Hier ist eine grundlegende UDF zum extrahieren aller werte, die einem regex muster entsprechen...

 

function extractxg(src : text,regex : text) do
let extValue := “”;
let idx := 0;
let idxLen := 0;
while testx(src, regex) do 
idx := index(src, extractx(src, regex));
idxLen := length(extractx(substr(src, idx), regex));
extValue := extValue + extractx(substr(src, idx), regex) + “,”;
src := substr(src, idx + idxLen)
end
;
if extValue = “” then
extValue := null
else
extValue := substr(extValue, 0, length(extValue) - 1)
end;
extValue
end

 

Anhand dieses beispiels...

 

let myVar := “a23B65nm87”;
extractxg(myVar, “\D+”)

 

a,B,nm wird als verketteter string zurückgegeben.

7 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Sean,

    sehr interessant. Wäre in diesem Fall nicht einfacher gewesen den string mit splitx aufzuteilen? 

    concat(splitx(YOURSOURCE, “\d+”))

    Leo

    • Sean
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo,

    Das war ein einfaches beispiel. Versuchen sie, die autoren der beiträge mit Ihrer methode aus dem quellcode dieser seite zu extrahieren, ohne die namen zu kennen 😉. Hier ist der code für meine methode...

     

    function extractxg(src : text,regex : text,grp : text) do
    let extValue := “”;
    let idx := 0;
    let idxLen := 0;
    while testx(src, regex) do 
    idx := index(src, extractx(src, regex));
    idxLen := length(extractx(substr(src, idx), regex));
    extValue := extValue + extractx(substr(src, idx), regex, grp) + “,”;
    src := substr(src, idx + idxLen)
    end
    ;
    if extValue = “” then
    extValue := null
    else
    extValue := substr(extValue, 0, length(extValue) - 1)
    end;
    extValue
    end;

    extractxg(“HTML Source”, “<div class=”“p-forum--post--author”“>\s+(.+)”, “$1”)

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Beeindruckend, Ich werde nachher ausprobieren. Habe ein ähnlichen Fall. Was genau macht $1 hier?

    • Sean
    • vor 4 Jahren
    • Gemeldet - anzeigen

    $1 ist die Erfassungsgruppe. Es enthält den Wert in Klammern (.+).

    Ich habe ein Update für die Funktion extractx() angefordert, damit das Flag “g” funktioniert, aber Frank scheint nicht dazu geneigt zu sein.

    https://ninox.com/de/forum/ideas-and-suggestions-5abb9f4f45eda7ea1e75ed02/please-fix-the-extract-function-so-flags-will-work-5e25440845dcf70528699a3e

    Wie Sie wissen, funktionieren Links in neuen Posts nicht, aber Sie können den Thread finden.

    Grüße,
    Sean

    • Josef
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Großartiger Workaround! Gratuliere :-)

    • Sean
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Danke schön :)

    • Sean
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Gerade aktualisierte Versionen. Ich habe Funktionsnamen mit "gfn" vorangestellt, um globale Funktionen zu beschreiben. Wie die Namen andeuten, erlaubt "NoFlags" keine Flags und "Flags" erfordert Flags.

     

    function gfnExtractxGNoFlags(src : text,regex : text,grp : text) do
    let extractedValue := "";
    let idx := 0;
    let idxLen := 0;
    while testx(src, regex) do
    idx := index(src, extractx(src, regex));
    idxLen := length(extractx(substr(src, idx), regex));
    extractedValue := extractedValue + if grp = "" then
    if extractx(substr(src, idx), regex) != null then
    extractx(substr(src, idx), regex) + "¶"
    end
    else
    if extractx(substr(src, idx), regex, grp) != null then
    extractx(substr(src, idx), regex, grp) + "¶"
    end
    end;
    src := substr(src, idx + idxLen)
    end
    ;
    if extractedValue != "" then
    extractedValue := substr(extractedValue, 0, length(extractedValue) - 1)
    end;
    if extractedValue != "" then
    split(extractedValue, "¶")
    else
    null
    end
    end;

     

    function gfnValidateFlags(flags : text) do
    let validFlags := "";
    if length(flags) != 0 then
    for i in range(0, length(flags)) do
    switch item(flags, i) do
    case "i":
    (validFlags := validFlags + "i")
    case "m":
    (validFlags := validFlags + "m")
    case "s":
    (validFlags := validFlags + "s")
    case "u":
    (validFlags := validFlags + "u")
    end
    end
    end;
    validFlags
    end;

    function gfnExtractxGFlags(src : text,regex : text,flags : text,grp : text) do
    let extractedValue := "";
    let validFlags := gfnValidateFlags(flags);
    let idx := 0;
    let idxLen := 0;
    while testx(src, regex, validFlags) do
    idx := index(src, extractx(src, regex, validFlags, "$0"));
    idxLen := length(extractx(substr(src, idx), regex, validFlags, "$0"));
    extractedValue := extractedValue + if extractx(substr(src, idx), regex, validFlags, grp) != null then
    extractx(substr(src, idx), regex, validFlags, grp) + "¶"
    end;
    src := substr(src, idx + idxLen)
    end
    ;
    if extractedValue != "" then
    extractedValue := substr(extractedValue, 0, length(extractedValue) - 1)
    end;
    if extractedValue != "" then
    split(extractedValue, "¶")
    else
    null
    end
    end

Content aside

  • vor 3 JahrenZuletzt aktiv
  • 7Antworten
  • 942Ansichten