Nếu bạn chỉ tìm kiếm một:
import re
match = re.search(r'href=[\'"]?([^\'" >]+)', s)
if match:
print match.group(0)
Nếu bạn có một chuỗi dài, và muốn mọi thể hiện của mô hình trong đó:
import re
urls = re.findall(r'href=[\'"]?([^\'" >]+)', s)
print ', '.join(urls)
đâu s
là chuỗi mà bạn đang tìm kiếm các kết quả phù hợp.
Giải thích nhanh về thứ e bit regexp:
r'...'
là chuỗi "thô". Nó dừng lại bạn phải lo lắng về việc thoát khỏi các ký tự khá nhiều như bình thường. (\
đặc biệt - trong một chuỗi nguyên một \
chỉ là một \
Trong một chuỗi thông thường bạn phải làm \\
mọi thời gian, và điều đó được cũ trong regexps..)
"href=[\'"]?
" nói để phù hợp với "href =", có thể theo sau là '
hoặc "
. "Có thể" bởi vì thật khó để nói mức độ nghiêm trọng của HTML mà bạn đang xem là gì, và các dấu ngoặc kép không bắt buộc.
Kèm theo bit tiếp theo trong "()
" để đặt thành "nhóm", có nghĩa là tách nó ra và trả lại riêng cho chúng tôi. Nó chỉ là một cách để nói "đây là một phần của mô hình mà tôi quan tâm."
"[^\'" >]+
" nói để phù hợp với bất kỳ ký tự không'
, "
, >
, hoặc một không gian. Về cơ bản đây là danh sách các ký tự kết thúc với URL. Nó cho phép chúng ta tránh việc cố gắng viết một regexp xứng đáng với một URL đầy đủ, điều này có thể phức tạp một chút.
Đề xuất trong câu trả lời khác để sử dụng BeautifulSoup không phải là xấu, nhưng nó đưa ra yêu cầu bên ngoài cao hơn. Thêm vào đó nó không giúp bạn trong mục tiêu của bạn về regexps học tập, mà tôi muốn giả định dự án phân tích cú pháp html cụ thể này chỉ là một phần của.
Nó khá dễ dàng để làm:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_to_parse)
for tag in soup.findAll('a', href=True):
print tag['href']
Một khi bạn đã cài đặt BeautifulSoup, anyway.
trùng lặp: http: // stackoverflow.com/questions/430966/regex-for-links-in-html-text –
Tôi đã rời xa SO một thời gian, thật tuyệt khi thấy tôi đã bỏ lỡ không có gì và mọi người đều KHÔNG hỏi cách phân tích cú pháp HTML với regex mỗi ngày chết tiệt. – bobince
@bobince Nhiều lần một ngày, thật tồi tệ khi tôi tạo ra hai câu hỏi mà tôi có thể chuyển hướng mọi người đến và một câu trả lời biểu mẫu chỉ ra họ ở đó. –