1

Les expressions régulières sont généralement exprimées sous forme de chaînes, mais elles ont également des propriétés (par exemple, une seule ligne, plusieurs lignes, ignorer la casse). Comment les stockez-vous? Et pour les expressions régulières compilées, comment le stocker?Comment stocker des expressions régulières dans le magasin de données Google App Engine?

S'il vous plaît noter que nous pouvons écrire des classes de propriétés personnalisées: http://googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html

Comme je ne comprends pas assez Python, mon premier essai d'écrire une propriété personnalisée qui stocke une expression régulière compilée a échoué.

+0

pourriez-vous clarifier ce que vous essayez réellement d'accomplir? – si28719e

Répondre

2

Vous pouvez stocker le texte, comme suggéré ci-dessus, ou vous pouvez stocker et décomposer le RE compilé. Par exemple, voir PickledProperty sur le livre de cuisine. En raison du (manque de) vitesse de Pickle, en particulier sur App Engine où cPickle n'est pas disponible, vous trouverez probablement que le stockage du texte de la regex est l'option la plus rapide. En fait, il semble que lorsqu'il est mariné, il stocke simplement le texte original de toute façon.

3

Je ne sais pas si Python supprts, mais dans regex .net, vous pouvez spécifier ces options dans le regex lui-même:

(?si)^a.*z$ 

préciserait une seule ligne, ignorer la casse.

En effet, les docs Python ici décrivent un tel mécanisme: http://docs.python.org/library/re.html

Pour récapituler: (cut'n'paste de lien ci-dessus)

(iLmsux?)

(One ou plus de lettres de l'ensemble 'i', 'L', 'm', 's', 'u', 'x'.) Le groupe correspond à la chaîne vide; les lettres définissent les drapeaux correspondants: re.I (ignorez la casse), re.L (en fonction de la locale), re.M (multiligne), re.S (le point correspond à tout), re.U (dépendant de l'Unicode), et re.X (verbose), pour l'expression régulière entière. (Les indicateurs sont décrits dans Contenu du module.) Ceci est utile si vous souhaitez inclure les indicateurs dans l'expression régulière, au lieu de passer un argument à la fonction compile().

Notez que l'indicateur (? X) modifie la façon dont l'expression est analysée. Il devrait être utilisé en premier dans la chaîne d'expression, ou après un ou plusieurs caractères d'espaces. S'il y a des caractères non-espaces avant le drapeau, les résultats sont indéfinis.

3

Je n'essaierais pas de stocker l'expression rationnelle compilée. Les données contenues dans une expression rationnelle compilée ne sont pas conçues pour être stockées et ne sont pas forcément picklables ou sérialisables. Il suffit de stocker la chaîne et recompiler (le module re le fera pour vous dans les coulisses de toute façon).

Questions connexes