Fragen Sie weiter nach Regex-SegmentierungIch habe einen Fehler gemacht. Wenn Sie Code wie diesen schreiben, erhalten Sie nicht das richtige Ergebnis.
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\([^\]]*)\]", "[\1]");Brauchen, um:
[{op},{q}]Also, wie man JSL schreibt. Vielen Dank!
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungWenn es sich bei den Daten um JSON- oder XML-Daten handelt, sollten Sie den json/xml-Parser von JMP verwenden. Es ist nicht einfach, einen Parser für diese verschachtelten Strukturen zu schreiben, und Regex allein reicht nicht aus. XML/JSON in eine Tabelle zu importieren und dann die Zeile und Spalte zu finden, ist eine gute Wahl.
Wenn die Daten auf andere Weise verarbeitet werden müssen, können Sie dies mit einer einfachen JSL-Schleife und einer Reihe von Regex-Tests tun, etwa so:
txt = loadtextfile(...);
ok=1;
while( ok,
... try various regex that remove a bit of data from txt ... set ok to 0 if nothing works.
)
Das funktioniert für kleine Dateien und lässt sich leicht warten. Aber eine große Datei mit vielen Datenbits ist zu langsam, da das Entfernen eines Datenbits aus einer großen TXT-Zeichenfolge bei jedem Entfernen viele Daten kopiert. (Es ist ein n ^ 2-Problem: Die Verdoppelung der Dateigröße führt zu einer 4-fachen Laufzeit.)
Bei großen Dateien ist es am besten, eine einzelne Musterübereinstimmung zu schreiben, die die Eingabezeichenfolge nicht ändert. Sie können reguläre Ausdrücke oder Muster innerhalb eines patRepeat()-Musters verwenden, das mit der gesamten Datei übereinstimmt, und Sie verwenden patTest(... ;1), um etwas JSL innerhalb der Übereinstimmung auszuführen, das die geparsten Ergebnisse in einer JSL-Matrix oder -Liste speichert oder assoziatives Array. Bevor JMP einen integrierten JSON-Parser hatte, @XanGregg und ich habe einige geschrieben JSL zum Analysieren von JSON-Dateien . Es ist immer noch ein großartiges Beispiel, aber der integrierte Parser von JMP ist besser.
Hier sind einige andere Beiträge, die JSL haben, das eine Datei analysiert patMatch(... patRepeat( Muster ) ... ) .
https://community.jmp.com/t5/Uncharted/The-Other-Kind-of-Model/ba-p/231703 Analysieren einer Datendatei für ein 3D-Modell
https://community.jmp.com/t5/Uncharted/Web-Logs/ba-p/29389 Analysieren einer Apache-Protokolldatei
https://community.jmp.com/t5/Uncharted/WordNet/ba-p/28984 Wordnet-Datei parsen
https://community.jmp.com/t5/Uncharted/Pronounce-Elephant/ba-p/21272 Analysieren der CMU-Phonemdatei
Ich verwende oft die Funktion >>log(), um komplizierte Musterübereinstimmungen zu debuggen.
https://community.jmp.com/t5/Uncharted/Backtracking-Secrets/ba-p/20984 Verwendung der >>log() zum Debuggen
und
https://community.jmp.com/t5/Uncharted/Pattern-Matching/ba-p/21005 Einführung zu patMatch()
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008 Einführung zu regulärer Ausdruck ()
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungWeil ich so etwas durchschleifen muss.
Ich möchte immer noch lernen, wie man Regularisierung verwendet, um überschüssige Daten zu entfernen und nützliche Daten für die kontinuierliche Verarbeitung mit JSL aufzubewahren. Vielen Dank!
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungDanke für Expertenhilfe!
Ich habe JMP15 heruntergeladen und gelernt, wie das geht.
Ich habe verschiedene Möglichkeiten zum Abrufen der Daten verglichen. Ich verstehe den Unterschied zwischen ihnen.

Betreff: Fragen Sie weiterhin nach Regex-SegmentierungJMP 15 leistet mit diesen JSON-Daten ziemlich gute Arbeit (benennen Sie die Datei von .txt in .json um, das wird einfacher @Justin_Chilton ); JMP 14 scheint diesen JSON-Fall nicht korrekt zu handhaben. Hier ist der JMP 15-Import mit Best Guess und Hinzufügen der Stack-Option:
Best Guess is under the red triangleBest Guess befindet sich unter dem roten Dreieck Vielleicht möchten Sie zwei Importe wie folgt durchführen:
get the little table of column namesHolen Sie sich die kleine Tabelle der Spaltennamen
get the bigger table of dataHolen Sie sich die größere Datentabelle
Sie können Spalten auslassen, die Sie nicht möchten. Sie könnten die Spaltennamen aus der kleinen Tabelle auf die große Tabelle anwenden und value0 in 2018 umbenennen.
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungDer andere Code ist
"\[[^\[]+(?=}$)"
Betreff: Fragen Sie weiter nach Regex-SegmentierungIch habe zwei orthogonale Codes in der VBA-Community, aber ich werde sie immer noch nicht in JSL-Code ändern.
Fragen Sie nach fachkundiger Anleitung. Danke!
Sub t()
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "^(?:.*?(\[.*?]))*|."
reg.Global = True
Cells(1, 2) = reg.Replace(Cells(1, 1).Value, "$1")
End Sub
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungIch weiß nicht genug.
Ich dachte, es wäre nur eine Partition
Beginnen mit :[{
und enden mit dem zweiten}]
so kann [{...}] und zwischen ihnen erhalten werden.
Es scheint, dass mein ursprüngliches Verständnis zu voreilig war.
Vielen Dank!
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungEine andere Idee ist, einen Parser für eine verschachtelte Datenstruktur (Liste?) zu entwerfen und zu schreiben, um den Text zu streamen, die Daten zu erstellen und dann die gewünschten Werte zu sammeln.
Betreff: Fragen Sie weiter nach Regex-SegmentierungDer eigentliche Text ist viel komplexer als das Beispiel, das Sie gestellt und das wir gelöst haben.
Sie haben dieses Problem schon einmal gepostet. Ich habe dann versucht, den Text zuerst in eine JMP-Liste zu konvertieren und dann die Elemente zu durchlaufen, anstatt zu versuchen, mit dem gesamten Text zu arbeiten. JMP hat mich den ganzen Weg bekämpft und nichts, was ich versucht habe, hat funktioniert. Vielleicht weiß jemand, wie man eine Liste bekommt. Es scheint so einfach. Ich denke, dass die Verarbeitung der Zeichenfolgen mit Regex() viel einfacher wäre, wenn der Text in Listenelemente aufgeteilt wäre.
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungDer obige Code für tatsächliche Daten ist immer noch nicht auf dem neuesten Stand.
Ich glaube nicht, dass ich den Schlüssel gefunden habe.

Bitte laden Sie Experten ein, die Anleitung fortzusetzen. Danke!
Betreff: Fragen Sie weiterhin nach Regex-SegmentierungAndere Form:
Names Default to Here( 1 );
string = "abcdef{:[[ghi]]:[{op},{q}]}";
c = Regex( string, "\{:.+:(.+)\}", "\1" );Betreff: Fragen Sie weiterhin nach Regex-SegmentierungHier ist eine mögliche Alternative:
c = Regex( "abcdef{:[[ghi]]:[{op},{q}]}", "\!\[(\{\w+\},*)+]" );Betreff: Fragen Sie weiterhin nach Regex-SegmentierungSo würde ich es machen:
Names Default To Here( 1 );
x = "abcdef{:[[ghi]]:[{op},{q}]}";
c=word(1,word(3,x,":"),"]") || "]";Betreff: Fragen Sie weiterhin nach Regex-SegmentierungEs geht auch nicht:
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]{([^\]]*)\]", "[{\1]");