2012-03-01 46 views
11

Un código en Python usando expresiones regulares que puede realizar algo como estoPython expresión regular para buscar una cadena entre comillas dobles dentro de una cadena

Input: Regex should return "String 1" or "String 2" or "String3" 
Output: String 1,String2,String3 

Gracias

+0

Podría haber citas entre comillas, ¿qué harías con eso? – user1227804

+0

No, no habrá ninguna comilla. Simplemente cadena simple con a-z, espacios en blanco de 0-9, guión bajo, en su mayoría alfanumérico sin comillas simples o dobles dentro de ellos3 – nomi

+2

¿Es esto una tarea para nosotros? [¿Qué has intentado] (http://whathaveyoutried.com) hasta ahora? –

Respuesta

35

Aquí está todo lo que tiene que hacer:

def doit(text):  
    import re 
    matches=re.findall(r'\"(.+?)\"',text) 
    # matches is now ['String 1', 'String 2', 'String3'] 
    return ",".join(matches) 

doit('Regex should return "String 1" or "String 2" or "String3" ') 
# result: 
'String 1,String 2,String3' 

Como ha señalado Li-Aung Yip: (casi cito)

.+? es la versión "no codiciosa" de .+. Hace que la expresión regular coincida con el menor número de caracteres posible en lugar de la mayor cantidad de caracteres que puede. La versión codiciosa, .+, dará la cadena 1" or "String 2" or "String 3; la versión no codicioso .+? 'Cadena 1, 2 cuerdas, STRING3'

Además (Johan de volver a hablar), si desea aceptar cadenas vacías, cambiar .+ a .*. Estrella significa cero o más, más significa al menos uno.

+1

Gracias, Johan, soy nuevo en python. Acabo de aprender. Súmate a tu ejemplo. Ojalá pudiera darte algunos puntos extra. – nomi

+10

Para elaborar, '. +?' Es la versión "no codiciosa" de '. +'. Hace que la expresión regular coincida con el menor número de caracteres posible en lugar de la mayor cantidad de caracteres que puede. La versión codiciosa, '. +', Dará 'cadena 1' o 'Cadena 2' o 'Cadena 3'; la versión no codiciosa '. +?' da 'String 1',' String 2', 'String 3'. –

+0

+1 por. +? y. + explicación – nomi

Cuestiones relacionadas