Próbuję dostać 482.75 z następującym tekstem: <span id="yfs_l84_aapl">482.75</span>
Co [^.] * Oznacza w wyrażeniu regularnym?
regex użyłem to: regex = '<span id="yfs_l84_[^.]*">(.+?)</span>'
i to działało.
Ale nie rozumiem, dlaczego [^.] * Może pasować do aapl tutaj? Moje zrozumienie jest takie. oznacza dowolną postać, z wyjątkiem nowej linii; i^oznacza negator. Zatem [^.] Powinno być znakiem nowej linii, a [^.] * Powinno być dowolną liczbą nowych linii. Ta teoria jest jednak sprzeczna z rzeczywistą implementacją.
Każda pomoc jest doceniana i z góry dziękuję.
Kod pyton użyłem:
import urllib
import re
htmlfile = urllib.urlopen("http://finance.yahoo.com/q?s=AAPL&ql=0")
htmltext = htmlfile.read()
regex = '<span id="yfs_l84_[^.]*">(.+?)</span>'
pattern = re.compile(regex)
price = re.findall(pattern, htmltext)
print "the price of of aapl is", price[0]
Dokumentacja Pythona mówi nawet bardzo wyraźnie: [znaki specjalne tracą specjalne znaczenie w zestawach] (http://docs.python.org/2/library/re.html#regular-expression-syntax). – Evert
to nie oznacza, dlaczego pasuje do 'aapl' – Anirudha
@Airirh: Tak, to prawda. –