2013-09-30 20 views
6

Ich versuche 482,75 aus dem folgenden Text zu erhalten: <span id="yfs_l84_aapl">482.75</span>Was bedeutet [^.] * Im regulären Ausdruck?

Die Regex I verwendet: regex = '<span id="yfs_l84_[^.]*">(.+?)</span>' und es funktionierte.

Aber die Sache, die ich nicht verstehe, ist, warum [^.] * Kann aapl hier übereinstimmen? Mein Verständnis ist das. bedeutet jedes Zeichen außer einem Zeilenumbruch; und^bedeutet Negator. Also sollte [^.] Newline sein und [^.] * Sollte eine beliebige Anzahl neuer Zeilen sein. Diese Theorie widerspricht jedoch der realen Implementierung.

Jede Hilfe wird geschätzt und danke im Voraus.


Der Code Python I verwendet:

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] 

Antwort

18

Im [] die . bedeutet nur einen Punkt. Und die führende ^ bedeutet "alles andere als ...".

So [^.]* entspricht null oder mehr Nicht-Punkte.

+2

Die Python-Dokumentation sagt sogar so explizit: [Sonderzeichen verlieren ihre besondere Bedeutung innerhalb von Mengen] (http://docs.python.org/2/library/re.html#regular-expression-syntax). – Evert

+0

das stimmt nicht warum warum passt es 'aapl' – Anirudha

+7

@Anirudh: Ja, tut es. –

2

. Punkt in einem Zeichen-Matcher bedeutet nur Punkt, wörtlich.

Verschiedene Syntax und Sonderzeichen (- Strich für Bereich,^für Negation) gelten innerhalb einer Zeichen-Matching-Spezifikation. Andere Mustersyntaxen gelten nicht.