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

    En el siguiente script me gustaría extraer texto entre las comillas dobles ("). Sin embargo, el intérprete de python no está contento y no puedo entender por qué ...Python regex coincide texto entre comillas

    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() 
    

    la salida debe ser find.me-/\

    +3

    Por cierto, puede simplificar el patrón: patrón = r '"([^"] *) "' –

    +0

    ' re.findall (patrón, texto) 'también puede ser útil si necesita hacer coincidir todos los Las citas. –

    Respuesta

    11

    match comienza a buscar desde el comienzo del texto

    uso search lugar:..

    #!/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 y search devuelven None cuando no coinciden.

    Supongo que obtendrá AttributeError: 'NoneType' object has no attribute 'group' de python: Esto se debe a que está asumiendo que coincidirá sin comprobar el retorno de re.match.

    +0

    ¿Cómo puedo verificar si devolvieron nulo o no? –

    +0

    'si m es None': doStuffIfNoMatch() else: doStuffIfMatch()' –

    1

    Use re.search() en lugar de re.match(). Este último solo coincidirá con al comienzo de cadenas (como un implícito ^).

    1

    Necesita re.search(), no re.match() `que está anclado al inicio de su cadena de entrada.

    Docs here

    1

    si escribe:

    m = re.search(pattern, text) 
    

    partidos: búsquedas al inicio del texto

    búsqueda: Búsquedas toda la cadena de

    Tal vez esto ayuda usted debe entender: http://docs.python.org/library/re.html#matching-vs-searching

    Cuestiones relacionadas