Domanda

Le espressioni regolari sono generalmente espressa come stringhe, ma hanno anche proprietà (es. Linea, multilinea, ignorare caso). Come ti conservarli? E per le espressioni regolari compilate, come salvarlo?

Si prega di notare che possiamo scrivere classi proprietà personalizzate: http : //googleappengine.blogspot.com/2009/07/writing-custom-property-classes.html

Non capisco Python abbastanza, il mio primo tentativo di scrivere una proprietà personalizzata che memorizza un'espressione regolare compilata non riuscita.

È stato utile?

Soluzione

È possibile memorizzare il testo, come suggerito sopra, oppure si può salamoia e deserializzazione RE compilato. Ad esempio, vedere PickledProperty sul libro di cucina.

A causa della (mancanza di) velocità di Pickle, in particolare su App Engine dove cPickle non è disponibile, probabilmente troverete che memorizzare il testo del regex è l'opzione più veloce. In realtà, sembra che quando in salamoia, una ri memorizza semplicemente il testo originale in ogni caso.

Altri suggerimenti

Non sono sicuro se Python supprts, ma in regex NET, è possibile specificare queste opzioni all'interno del regex stessa:

(?si)^a.*z$

dovrebbe specificare a linea singola, ignorare lettere maiuscole.

In effetti, i documenti Python descrivono un meccanismo del genere qui: http: //docs.python. org / library / re.html

Per ricapitolare: (cut'n'paste dal link qui sotto)

(? ILmsux)

(. Una o più lettere dal set 'i', 'L', 'm', 's', 'u', 'x') Il gruppo corrisponde alla stringa vuota; le lettere impostare i flag corrispondenti: re.I (ignora caso), re.L (dipende da locale), re.M (multi-linea), re.S (dot soddisfa tutti), re.U (Unicode dipendente), e re.X (dettagliato), per l'intera espressione regolare. (Le bandiere sono descritti nel Modulo Contents). Questo è utile se si desidera includere le bandiere come parte dell'espressione regolare, invece di passare un argomento flag della funzione di compilazione ().

Si noti che il (? X) bandiera cambia come l'espressione viene analizzata. Dovrebbe essere usato prima nella stringa di espressione, o dopo uno o più caratteri di spaziatura. Se ci sono personaggi che non sono spazi prima della bandiera, i risultati sono indefiniti.

Non vorrei cercare di memorizzare il regex compilato. I dati in una regex compilato non è progettato per essere memorizzati, e non sono garantite essere serializzabili o serializzabile. Basta memorizzare la stringa e ri-compilazione (il modulo re farà questo per voi dietro le quinte in ogni caso).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top