Saltar al contenido

Python regex coincide con el texto entre comillas

Solución:

match comienza a buscar desde el principio del texto.

Usar search en lugar de:

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

Supongo que estas consiguiendo AttributeError: 'NoneType' object has no attribute 'group' de python: esto se debe a que está asumiendo que coincidirá sin verificar el retorno de re.match.

Si tú escribes:

m = re.search(pattern, text)

fósforo: busca al principio del texto

buscar: busca toda la cadena

Quizás esto te ayude a entender: http://docs.python.org/library/re.html#matching-vs-searching

En lugar de una expresión regular, podrías

def text_between_quotes(text):
    between_quotes = text.split('"')[1::2]
    # if you have an odd number of quotes (ie. the quotes are unbalanced), 
    # discard the last element
    if len(between_quotes) % 2 == 0 and not text.endswith('"'):
        return between_quotes[:-1]
    return between_quotes

Divida el texto entre comillas y todos los índices impares estarán entre dos comillas.

my_string = 'Hello, "find.me-_/\" please help and "this quote" here'
my_string.split('"')
my_string.split('"')[1::2] # ['find.me-_/\', 'this quote']

pero aún debe asegurarse de no tener comillas desequilibradas (digamos que su texto contiene 3 "‘s), por lo que si tiene un número par de cosas después de hacer el split, debe descartar el último elemento, que es lo que if declaración está haciendo.

Esto supone que no tiene comillas entre comillas y que su texto no mezcla comillas ni utiliza comillas elegantes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *