2012-03-27 16 views
18

Dire che ho una stringaCome usare espressioni regolari con caratteri opzionali in python?

"3434.35353" 

e un'altra stringa

"3593" 

Come faccio a fare una singola espressione regolare che è in grado di abbinare sia senza di me dover impostare il modello a qualcos'altro se il altro fallisce? So \d+ sarebbe partita la 3593, ma non farei qualsiasi cosa per il 3434.35353, ma (\d+\.\d+) sarebbe pari solo quello con il decimale e restituire risultati per la 3593.

mi aspetto m.group(1) per tornare:

"3434.35353" 

o

"3593" 

risposta

32

si può mettere un ? dopo che un gruppo di personaggi per renderla facoltativa.

Si desidera un punto seguito da un numero qualsiasi di cifre \.\d+, raggruppato insieme , facoltativamente (\.\d+)?. Stick che nel tuo modello:

import re 
print re.match("(\d+(\.\d+)?)", "3434.35353").group(1) 
3434.35353 
print re.match("(\d+(\.\d+)?)", "3434").group(1) 
3434 
1

Utilizzare la "uno o zero" quantificatore, ?. Il tuo regex diventa: (\d+(\.\d+)?).

Vedere il capitolo 8 dello TextWrangler manual per ulteriori dettagli sui diversi quantificatori disponibili e su come utilizzarli.

3

Questa regex dovrebbe funzionare:

\d+(\.\d+)? 

corrisponda una o più cifre (\d+) eventualmente seguito da un punto e una o più cifre ((\.\d+)?).

0

Leggere sulla libreria Python RegEx. Il link risponde alla tua domanda e spiega perché.

Tuttavia, per corrispondere una cifra seguita da più cifre con un decimale opzionale, è possibile utilizzare

re.compile("(\d+(\.\d+)?)") 

In questo esempio, il? dopo che il gruppo di acquisizione .\d+ specifica che questa parte è facoltativa.

Example

Problemi correlati