Python - Expresiones regulares y caracteres especiales

 
Vista:

Expresiones regulares y caracteres especiales

Publicado por Pitarchhh (2 intervenciones) el 19/01/2018 09:42:50
Buenos días,

Soy bastante nuevo en esto de Python (uso la versión 2.7, por cierto). Me han mandado un ejercicio bastante complejo en la universidad, pero mi duda es muy concreta: tengo que usar expresiones regulares para buscar títulos de revistas científicas. El problema es que los títulos son bastante diversos en cuanto estructura:

- Un ejemplo sencillo sería Nature, que se buscaría re.search("[A-Za-z]+", "cadena en la que busco título" )
- No obstante, es probable que me encuente también algo así EMBO J. , lo cual sería re.search ("[A-Za-z]+ [A-Za-z]+.", cadena de búsqueda).

- Por desgracia también hay modelos donde el título son todo abreviaturas. (por ejemplo Bio. Chem.)

La pregunta sería como hacer para poner todo en una búsqueda lo más corta posible. He probado varias cosas, pero no parecen dar resultado. También pasa a veces que doy a run y el programa no hace nada (aparece como que está corriendo, pero lo dejas estar y no pasa nada).

Espero que puedan ayudarme. Muchas gracias por su atención

Un saludo,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de abzerox
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Expresiones regulares y caracteres especiales

Publicado por abzerox (109 intervenciones) el 20/01/2018 05:56:09
Hola, puedo plantearte una opción como posible solución tu luego puedes adptarlas a tus necesidades ya que existen diversos formatos y caracteres que puede tener un titulo. En cambio, si tienes un número acotado de formatos esta puede servirte para comenzar.

1
2
3
title = 'EMBO J.'
result = re.search(r"^(?P<title>[a-z0-9]+(.\s|\s)?[a-z0-9]+\.?)$", title.strip(), flags=re.IGNORECASE)
print(result.group('title')

Pudes agregar el manejo de acentos y la letra Ñ.
1
2
3
4
# title = 'Bóvedas de acero'
title = '100 años de Soledad'
result = re.search(r"^(?P<title>[a-záéíóuñ0-9¡¿]+(.\s|\s)?[a-záéíóúñ0-9\s!?]+\.?)$", title.strip(), flags=re.IGNORECASE)
print(result.group('title')

Comentanos si es lo que buscabas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Expresiones regulares y caracteres especiales

Publicado por Pitarchhh (2 intervenciones) el 20/01/2018 19:34:50
Es lo que buscaba. Ya funciona.

Muchas gracias =)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar