Continuer à poser des questions sur la segmentation RegexJ'ai fait une erreur. L'écriture d'un code comme celui-ci ne vous donne pas le bon résultat.
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\([^\]]*)\]", "[\1]");Besoin d'obtenir:
[{op},{q}]Alors, comment écrire JSL. Merci beaucoup!
Re : Continuer à poser des questions sur la segmentation RegexSi les données sont au format json ou xml, vous devez utiliser l'analyseur json/xml de JMP. Il n'est pas facile d'écrire un analyseur pour ces structures imbriquées, et regex seul ne suffit pas. Importer le xml/json dans une table, puis trouver la ligne et la colonne est un excellent choix.
Si les données doivent être gérées d'une autre manière, vous pouvez le faire avec une simple boucle JSL et un tas de tests regex, quelque chose comme ceci :
txt = loadtextfile(...);
ok=1;
while( ok,
... try various regex that remove a bit of data from txt ... set ok to 0 if nothing works.
)
Cela fonctionne pour les petits fichiers et peut être facilement maintenu. Mais un gros fichier avec de nombreux bits de données sera trop lent car la suppression d'un peu de données d'une grande chaîne txt copie beaucoup de données, pour chaque suppression. (c'est un problème n^2 : doubler la taille du fichier multipliera par 4 le temps d'exécution.)
Pour les fichiers volumineux, il est préférable d'écrire une seule correspondance de modèle qui ne modifie pas la chaîne d'entrée. Vous pouvez utiliser des expressions régulières ou des modèles dans un modèle patRepeat() qui correspond à l'ensemble du fichier, et vous utiliserez patTest(... ;1) pour exécuter du JSL à l'intérieur de la correspondance qui enregistre les résultats analysés dans une matrice ou une liste JSL ou tableau associatif. Avant que JMP ait un analyseur json intégré, @XanGregg et j'ai écrit quelques JSL pour analyser les fichiers json . C'est toujours un excellent exemple, mais l'analyseur intégré de JMP est meilleur.
Voici quelques autres messages qui ont JSL qui analyse un fichier en utilisant patCorrespond(... patRepeat( pattern ) ... ) .
https://community.jmp.com/t5/Uncharted/The-Other-Kind-of-Model/ba-p/231703 analyse d'un fichier de données pour un modèle 3D
https://community.jmp.com/t5/Uncharted/Web-Logs/ba-p/29389 analyse d'un fichier journal Apache
https://community.jmp.com/t5/Uncharted/WordNet/ba-p/28984 analyse du fichier wordnet
https://community.jmp.com/t5/Uncharted/Pronounce-Elephant/ba-p/21272 analyse du fichier de phonèmes CMU
J'utilise souvent la fonction >>log() pour déboguer des correspondances de modèles compliquées.
https://community.jmp.com/t5/Uncharted/Backtracking-Secrets/ba-p/20984 en utilisant le >>journal() pour le débogage
et
https://community.jmp.com/t5/Uncharted/Pattern-Matching/ba-p/21005 introduction à patMatch()
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008 introduction à regex()
Re : Continuer à poser des questions sur la segmentation RegexParce que j'ai besoin de boucler quelque chose comme ça.
Je veux toujours apprendre à utiliser la régularisation pour supprimer les données en excès et conserver les données utiles pour un traitement continu avec JSL. Merci beaucoup !
Re : Continuer à poser des questions sur la segmentation RegexMerci pour l'aide des experts !
J'ai téléchargé JMP15 et appris comment faire cela.
J'ai comparé différentes manières d'obtenir les données. Je comprends la différence entre elles.

Re : Continuer à poser des questions sur la segmentation RegexJMP 15 fait du bon boulot avec ces données JSON (renommer le fichier de .txt en .json, ce sera plus facile @Justin_Chilton ); JMP 14 ne semble pas gérer correctement ce cas json. Voici l'importation JMP 15 en utilisant la meilleure estimation et en ajoutant l'option de pile :
Best Guess is under the red triangleBest Guess est sous le triangle rouge vous voudrez peut-être faire deux importations comme ceci :
get the little table of column namesobtenir le petit tableau des noms de colonnes
get the bigger table of dataobtenir la plus grande table de données
Vous pouvez omettre les colonnes dont vous ne voulez pas. Vous pouvez appliquer les noms de colonne de la petite table à la grande table, en renommant value0 en 2018.
Re : Continuer à poser des questions sur la segmentation RegexL'autre code est
"\[[^\[]+(?=}$)"
Re : Continuer à poser des questions sur la segmentation RegexJ'ai reçu deux codes orthogonaux dans la communauté VBA, mais je ne les changerai toujours pas en code JSL.
Demandez conseil à un expert. Merci !
Sub t()
Set reg = CreateObject("vbscript.regexp")
reg.Pattern = "^(?:.*?(\[.*?]))*|."
reg.Global = True
Cells(1, 2) = reg.Replace(Cells(1, 1).Value, "$1")
End Sub
Re : Continuer à poser des questions sur la segmentation RegexJe ne sais pas assez.
Je pensais que c'était juste une partition
Commencer avec :[{
et terminez par la seconde}]
donc peut obtenir [{...}] et entre eux.
Il semble que ma compréhension initiale ait été trop hâtive.
Merci!
Re : Continuer à poser des questions sur la segmentation RegexUne autre idée est de concevoir et d'écrire un analyseur pour une structure de données imbriquée (liste ?) pour diffuser le texte, créer les données, puis collecter les valeurs souhaitées.
Re : Continuer à poser des questions sur la segmentation RegexLe texte réel est beaucoup plus complexe que l'exemple que vous avez posé et que nous avons résolu.
Vous avez déjà posté ce problème. J'ai ensuite essayé de convertir d'abord le texte en une liste JMP, puis de parcourir les éléments, plutôt que d'essayer de travailler avec le texte entier. JMP m'a combattu tout du long et rien de ce que j'ai essayé n'a fonctionné. Peut-être que quelqu'un d'autre sait comment obtenir une liste. Cela semble si simple. Je pense que le traitement des chaînes avec Regex() serait beaucoup plus simple avec le texte divisé en éléments de liste.
Re : Continuer à poser des questions sur la segmentation RegexLe code ci-dessus pour les données réelles n'est toujours pas à la hauteur.
Je ne pense pas avoir trouvé la clé.

Veuillez inviter des experts à poursuivre les conseils. Merci !
Re : Continuer à poser des questions sur la segmentation RegexAutre formulaire :
Names Default to Here( 1 );
string = "abcdef{:[[ghi]]:[{op},{q}]}";
c = Regex( string, "\{:.+:(.+)\}", "\1" );Re : Continuer à poser des questions sur la segmentation RegexVoici une alternative potentielle :
c = Regex( "abcdef{:[[ghi]]:[{op},{q}]}", "\!\[(\{\w+\},*)+]" );Re : Continuer à poser des questions sur la segmentation RegexVoici comment je procéderais :
Names Default To Here( 1 );
x = "abcdef{:[[ghi]]:[{op},{q}]}";
c=word(1,word(3,x,":"),"]") || "]";Re : Continuer à poser des questions sur la segmentation Regexça marche pas non plus :
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]{([^\]]*)\]", "[{\1]");