2013-09-30 16 views
6

Tôi đang cố gắng lấy 482,75 từ văn bản sau: <span id="yfs_l84_aapl">482.75</span>[^.] * Có nghĩa là gì trong biểu thức chính quy?

Regex tôi đã sử dụng là: regex = '<span id="yfs_l84_[^.]*">(.+?)</span>' và nó hoạt động.

Nhưng điều tôi không hiểu là tại sao [^.] * Có thể khớp với aapl ở đây? Sự hiểu biết của tôi là vậy. có nghĩa là bất kỳ ký tự nào ngoại trừ một dòng mới; và^nghĩa là từ chối. Vì vậy, [^.] Nên là dòng mới và [^.] * Nên có bất kỳ số dòng mới nào. Tuy nhiên, lý thuyết này trái ngược với việc thực hiện thế giới thực.

Bất kỳ trợ giúp nào được đánh giá cao và cảm ơn trước.


Mã python tôi đã sử dụng:

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] 

Trả lời

18

Trong [] các . có nghĩa chỉ là một dấu chấm. Và hàng đầu ^ có nghĩa là "bất cứ điều gì nhưng ...".

Vì vậy, [^.]* khớp với số không hoặc nhiều dấu chấm.

+2

Tài liệu Python thậm chí còn nói quá rõ ràng: [Ký tự đặc biệt mất ý nghĩa đặc biệt của chúng bên trong bộ] (http://docs.python.org/2/library/re.html#regular-expression-syntax). – Evert

+0

không an toàn vì sao nó khớp với 'aapl' – Anirudha

+7

@Anirudh: Đúng vậy. –

2

. chấm trong một nhân vật phù hợp chỉ có nghĩa là dấu chấm, theo nghĩa đen.

Cú pháp và ký tự đặc biệt khác (- dấu gạch ngang cho dải ô,^cho phủ định) áp dụng bên trong đặc điểm khớp với ký tự. Các cú pháp mẫu khác không áp dụng.

Các vấn đề liên quan