Python analyse entre crochets blocs
Quelle serait la meilleure façon Python pour analyser de gros morceaux de texte contenues dans la correspondance entre parenthèses?
"{ { a } { b } { { { c } } } }"
doit d'abord retourner:
[ "{ a } { b } { { { c } } }" ]
de le mettre comme une entrée doit retourner:
[ "a", "b", "{ { c } }" ]
qui doit retourner:
[ "{ c }" ]
[ "c" ]
[]
- Je suis curieux de savoir. Dans votre dernier exemple, serait-il de retour [ "{ c }" ] et puis que serait de retour [ "c" ] et puis que serait de retour [ ]?
- Ne pas de deuxième déclaration ["{ a } { b } { { { c } } }"] au lieu de cela?
- La deuxième instruction est [ "{ a } { b } { { { c } } }" ], exactement ce que vous avez écrit... je vais remplir la totalité de la séquence de sorte que les gens sachent exactement ce que je veux
- Je pense que vous voulez [ "{ a } { b } { { { c } } }" ] aller à [ "a", "b", "{ { c } }" ], ai-je le droit?
- Oui, vous êtes, je vais aller modifier...
Vous devez vous connecter pour publier un commentaire.
Pseudocode:
Ou ce pyparsing version:
Je suis une sorte de Python, alors allez facile sur moi, mais ici, c'est une application qui fonctionne:
De sortie:
Analyser à l'aide de
lepl
(installable via$ easy_install lepl
):De sortie:
Vous pouvez également analyser tout à la fois, bien que je trouve le
{a}
à dire"a"
plutôt que["a"]
un peu bizarre. Si j'ai bien compris le format correctement:Si vous souhaitez utiliser un parser (lepl dans ce cas), mais que vous voulez toujours les résultats intermédiaires plutôt qu'un final analysé liste, alors je pense que c'est le genre de chose que vous recherchez:
Qui pourrait sembler opaque au premier abord, mais c'est assez simple en fait :o)
imbriquée est une définition récursive d'un comparateur pour imbriquée entre crochets (le "+" et [...] dans la définition de tout garder comme une seule chaîne après qu'il a été appariés). Puis split dit correspondre autant que possible ("[:]") de quelque chose qui est entouré par "{" ... "}" (qui nous jeter avec "Drop") et qui contient une expression imbriquée ou n'importe quelle lettre.
Enfin, voici un lepl version du "tout en un" parser qui donne un résultat dans le même format que le pyparsing exemple ci-dessus, mais qui (je crois) est plus souple sur la façon espaces apparaissent dans l'entrée:
Solution de nettoyage. Cela permettra de trouver le retour de la chaîne entre la limite extérieure de support. Si Aucun n'est retourné, il n'y a pas de match.
À l'aide de Grako (grammaire compilateur):
De sortie
Voici une solution je suis venu avec un semblable cas d'utilisation. Cela a été vaguement basé sur le acceptées pseudo code de réponse. Je ne voulais pas ajouter toutes les dépendances de bibliothèques externes: