8
votes

Split String avec regex

Je cherche à scinder une chaîne de forme générique, où les crochets indiquent les "sections" de la chaîne. Ex: xxx pré>

et renvoie un vecteur de caractère qui ressemble à: p> xxx pré>

modifier: fini par l'aide de: p>

x <- "[a] + [bc] + 1"
x <- gsub("\\[",",[",x)
x <- gsub("\\]","],",x)
strsplit(x,",")


1 commentaires

Veuillez poster ce que vous avez fini par utiliser comme une réponse plutôt que d'une modification au poste.


4 Réponses :


5
votes

Ceci est une approche paresseuse: xxx


2 commentaires

Vous dites 'paresseux' parce que vous utilisez les espaces plutôt que d'utiliser des crochets à séparer?


Oui (pas de rééglementation intense réelle)



5
votes

Vous pouvez calculer manuellement les points de scission manuellement et utiliser substrant : xxx


3 commentaires

Là nous allons. Grand progrès vers la fabrication d'un «journal». Pas que je comprenne complètement, mais je pensais gregexpr serait utile. J'ai été surpris que vous n'aviez pas besoin d'utiliser "\]" dans le motif.


Je pense que ] n'a pas besoin d'être échappé car il n'est pas interprété comme une fin de cours de caractères en raison du fait que [ est. Hmm, pas sûr que je suis très clair :-)


J'avais la même pensée, mais cela suggère que la "spécialité" est plus dépendante de contexte que ce que j'aurais attendu.



6
votes

J'ai vu le code de TYLERINKER et suspecter qu'il peut être plus clair que cela, mais cela peut servir de manière à apprendre un ensemble de fonctions différents. (J'ai aimé son mieux avant d'avoir remarqué que cela se divisait sur des espaces.) J'ai essayé d'adapter cela à travailler avec strpsplit code> mais cette fonction supprime toujours les séparateurs. Peut-être que cela pourrait être adapté pour faire un newstrsplit code> qui divise les séparateurs mais les laisse dans? Il ne faut probablement pas se diviser au premier ou dernier position et distinguer entre l'ouverture et la fermeture de séparateurs.

scan(text=   # use scan to separate after insertion of commas
            gsub("\\]", "],",   # put commas in after "]"'s
            gsub(".\\[", ",[",  x)) ,  # add commas before "[" unless at first position
        what="", sep=",")    # tell scan this character argument and separators are ","
#Read 4 items
#[1] "[a]"  " +"   "[bc]" " + 1"


2 commentaires

J'aime cette approche car il n'est pas dépendant de l'espace blanc pour la division. Le maintien de l'espace blanc dans la sortie n'était pas important pour cette tâche, j'ai donc modifié ceci pour fonctionner avec Plutention :


Merci pour le commentaire positif, mais je considère que Juba est une meilleure réponse. Je vais l'utiliser pour construire une fonction d'analyse simple qui accepte une paire d'arguments pour signaler le début et la fin des délimiteurs qui seront préservés.



5
votes

Et voici une version qui se sépare sur les crochets et les conserve dans le résultat, en utilisant des lunettes de vue positive et de la recherche à la recherche: xxx


0 commentaires