python
  • regex
  • 2012-01-31 16 views 6 likes 
    6

    Nel seguente script vorrei tirare fuori testo tra le virgolette ("). Tuttavia, l'interprete Python non è felice e non riesco a capire perché ...Python testo partita regex tra virgolette

    import re 
    
    text = 'Hello, "find.me-_/\\" please help with python regex' 
    pattern = r'"([A-Za-z0-9_\./\\-]*)"' 
    m = re.match(pattern, text) 
    
    print m.group() 
    

    l'uscita dovrebbe essere find.me-/\

    +3

    btw, è possibile semplificare il modello: pattern = r '"([^"] *) "' –

    +0

    ' re.findall (motivo, testo) 'può anche essere utile se è necessario abbinare tutto le virgolette. –

    risposta

    11

    match inizia la ricerca a partire dall'inizio del testo

    Uso search invece:..

    #!/usr/bin/env python 
    
    import re 
    
    text = 'Hello, "find.me-_/\\" please help with python regex' 
    pattern = r'"([A-Za-z0-9_\./\\-]*)"' 
    m = re.search(pattern, text) 
    
    print m.group() 
    

    match e search restituiscono None quando non corrispondono.

    Immagino che tu stia ricevendo AttributeError: 'NoneType' object has no attribute 'group' da python: questo è dovuto al fatto che stai presumendo che corrisponderai senza controllare il ritorno da re.match.

    +0

    Come posso verificare se hanno restituito nulla o no? –

    +0

    'se m è None': doStuffIfNoMatch() else: doStuffIfMatch()' –

    1

    Utilizzare re.search() anziché re.match(). Quest'ultimo corrisponderà solo a all'inizio di di stringhe (come un implicito ^).

    1

    È necessario re.search(), non re.match() `che è ancorato all'inizio della stringa di input.

    Docs here

    1

    se si scrive:

    m = re.search(pattern, text) 
    

    partita: ricerche all'inizio del testo

    ricerca: Ricerche tutta la stringa di

    Forse questo aiuta tu capisci: http://docs.python.org/library/re.html#matching-vs-searching

    Problemi correlati