Soy nuevo en RegEx. Estoy usando python para ir a través de una página web y seleccionar cierto texto. He podido elegir parte de lo que necesito con un poco de carácter adicional adjunto. En el siguiente ejemplo, estoy tratando de obtener esta expresión: "Necesito esto"

import re

test = '<area alt=Need This <span class=;viewot;>view 1</span>||tin view:<br /> ' \
       '<div class=sadfca3 24swcdsa c4566 54dscz>' \
       '<span class=asafwef1 41sd fd3532 safwef>' \
        '<img class=sfecs 234af wefw47 5awef>' \
        '</span> ' \
        '<span class=sad536 fwfad23 4s214 fsadfw>' \
        '<img class=&we234 fsafsdf 2323 asdfsd>' \
        '</span>' \
        '<span class=afasui2 34 ewiasd23 4fjlwe;>' \
        '<img class=sfawejac2 42jk hewwef32 4uafasd>' \
        '</span> ' \
        '<span class=gdfjuia w8 aw ijfaw a909>' \
        '<img class=asfwejhjdkh f 8sd 8 awiosa;f98a 8a' \
        '</span> <div class=afkj waj 98u2oi kjaf09></div>" href="jkhafu.php">'

print("findall")
print(re.findall(r'<area alt=?.*<span class=', str(test), re.I|re.M))
print("finditer")
print(re.finditer(r'<area alt=+.*<span class=', str(test), re.I|re.M))
print("match")
print(re.match(r'<area alt=+.*<span class=', str(test), re.I|re.M))
print("search")
print(re.search(r'<area alt=+.*<span class=', str(test), re.I|re.M))
print("split")
print(re.split(r'<area alt=+.*<span class=', str(test), re.I|re.M))

Re.match y re.search se acercan a lo que necesito. Aquí está el resultado del ejemplo anterior:

findall
['<area alt=Need This <span class=&quot;view&quot;>view 1</span>||time to spend in view:<br /> <div class=sadfca3 24swcdsa c4566 54dscz><span class=asafwef1 41sd fd3532 safwef><img class=sfecs 234af wefw47 5awef></span> <span class=sad536 fwfad23 4s214 fsadfw><img class=&we234 fsafsdf 2323 asdfsd></span><span class=afasui2 34 ewiasd23 4fjlwe;><img class=sfawejac2 42jk hewwef32 4uafasd></span> <span class=']
finditer
<callable_iterator object at 0x00493750>
match
<_sre.SRE_Match object; span=(0, 405), match='<area alt=Need This <span class=&quot;view&quot;>v>
search
<_sre.SRE_Match object; span=(0, 405), match='<area alt=Need This <span class=&quot;view&quot;>v>
split
['', 'gdfjuia w8 aw ijfaw a909><img class=asfwejhjdkh f 8sd 8 awiosa;f98a 8a</span> <div class=afkj waj 98u2oi kjaf09></div>" href="jkhafu.php">']

¿Cómo puedo usar RegEx con python 3.4 para obtener solo "Need This" de la cadena llamada test en el ejemplo anterior?

Cualquier ayuda sería muy apreciada!

-1
user908759 3 sep. 2014 a las 03:14

2 respuestas

La mejor respuesta

Use una afirmación retrospectiva y anticipada,

(?<=area alt=).*?(?=\s+<span class=)

Código:

>>> m = re.search(r'(?<=area alt=).*?(?=\s+<span class=)', test).group()
>>> m
'Need This'
3
Avinash Raj 2 sep. 2014 a las 23:43

Puedes usar esta expresión regular:

area alt=([\w\s]+)<

Demostración de trabajo

enter image description here

El código es:

import re
p = re.compile(ur'area alt=([\w\s]+)<')
test_str = u"YOUR TEXT HERE"
m = re.match(p, test_str)
print m.group(1)
2
Federico Piazza 2 sep. 2014 a las 23:34