10

我正在尝试从以下文本中获取 482.75:<span id="yfs_l84_aapl">482.75</span>

我使用的正则表达式是:regex = '<span id="yfs_l84_[^.]*">(.+?)</span>'它有效。

但我不明白的是为什么 [^.]* 可以在这里匹配 aapl?我的理解是这样的。指除换行符以外的任何字符;和 ^ 表示否定。所以 [^.] 应该是换行符,而 [^.]* 应该是任意数量的换行符。然而,这个理论与现实世界的实施相反。

任何帮助表示赞赏并提前感谢。


我使用的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]
4

2 回答 2

31

[].只是一个点。领先的^意思是“除了……之外的任何东西”。

所以[^.]*匹配零个或多个非点。

于 2013-09-30T08:39:28.920 回答
4

. 字符匹配器中的点仅表示点,字面意思。

不同的语法和特殊字符(- 破折号表示范围,^ 表示否定)适用于字符匹配规范。其他模式语法不适用。

于 2013-09-30T08:39:32.037 回答