2013-09-30 18 views
6

私は、次のテキストから482.75を取得しようとしている:regex = '<span id="yfs_l84_[^.]*">(.+?)</span>'、それが働いた:私が使用<span id="yfs_l84_aapl">482.75</span>正規表現では[^。] *は何を意味しますか?

正規表現です。

しかし、私が理解していないことは、[^。] *がここに一致する理由です。私の理解はそれです。改行以外の文字を意味します。 ^はネゲーターを意味する。したがって、[^。]は改行でなければならず、[^。] *は任意の数の改行でなければなりません。しかし、この理論は現実世界の実装に反する。

ご協力いただきありがとうございます。


Pythonの私が使用したコード:[].以内

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] 

答えて

18

だけドットを意味しています。そして、先頭の^は「何でも...」を意味します。

したがって、[^.]*は0個以上の非ドットに一致します。

+2

Pythonのドキュメントでは、[特殊文字はセット内で特別な意味を失います](http://docs.python.org/2/library/re.html#regular-expression-syntax)のように明示的にも言います。 – Evert

+0

なぜそれが 'aapl'と一致しないのか? – Anirudha

+7

@Anirudh:そうです。 –

2

。文字マッチャーのドットは文字通りドットを意味します。

異なる構文と特殊文字(範囲の場合は - ダッシュ、否定の場合は^)は、文字一致仕様内で適用されます。他のパターン構文は適用されません。

関連する問題