2010-04-01 27 views
12

¿Hay alguna manera de buscar, a partir de una cadena, una línea que contenga otra cadena y recuperar toda la línea?Buscar y obtener una línea en Python

Por ejemplo:

string = 
    qwertyuiop 
    asdfghjkl 

    zxcvbnm 
    token qwerty 

    asdfghjklñ 

retrieve_line("token") = "token qwerty" 

Respuesta

25

se mencionan "línea completa", así que supuse mystring es toda la línea.

if "token" in mystring: 
    print mystring 

sin embargo, si desea obtener sólo "qwerty token",

>>> mystring=""" 
...  qwertyuiop 
...  asdfghjkl 
... 
...  zxcvbnm 
...  token qwerty 
... 
...  asdfghjklñ 
... """ 
>>> for item in mystring.split("\n"): 
... if "token" in item: 
...  print item.strip() 
... 
token qwerty 
3

Con expresiones regulares

import re 
s=""" 
    qwertyuiop 
    asdfghjkl 

    zxcvbnm 
    token qwerty 

    asdfghjklñ 
""" 
>>> items=re.findall("token.*$",s,re.MULTILINE) 
>>> for x in items: 
...  print x 
... 
token qwerty 
15

Si prefiere una sola línea:

matched_lines = [line for line in my_string.split('\n') if "substring" in line] 
+0

accidentalmente me hace clic en el botón "downvote"! Creo que tengo que esperar para subir la votación, o tal vez se debe realizar una edición antes de que pueda corregir mi error. –

3
items=re.findall("token.*$",s,re.MULTILINE) 
>>> for x in items: 

también se puede obtener la línea si hay otros caracteres antes del token

items=re.findall("^.*token.*$",s,re.MULTILINE) 

lo anterior funciona como símbolo grep en UNIX y la palabra clave 'en' o .contains en Python y C#

s=''' 
qwertyuiop 
asdfghjkl 

zxcvbnm 
token qwerty 

asdfghjklñ 
''' 

http://pythex.org/ coincide con los siguientes 2 líneas

.... 
.... 
token qwerty 
Cuestiones relacionadas