2012-01-30 28 views
10

Tôi đang lập kế hoạch di chuyển một trong các mẩu tin lưu niệm của mình sang Python. Tôi cảm thấy thoải mái khi sử dụng preg_matchpreg_match_all bằng PHP. Tôi không tìm thấy một hàm phù hợp trong Python tương tự như preg_match. Bất cứ ai có thể vui lòng giúp tôi làm như vậy?Đối tác với preg_match của PHP bằng Python

Ví dụ, nếu tôi muốn để có được nội dung giữa <a class="title"</a>, tôi sử dụng các chức năng sau đây trong PHP:

preg_match_all('/a class="title"(.*?)<\/a>/si',$input,$output); 

Trong khi bằng Python Tôi không thể tìm ra một chức năng tương tự.

+1

Đây là pyt hon regex docs: http://docs.python.org/howto/regex.html –

+2

Trong Python, chúng tôi không sử dụng cụm từ thông dụng để phân tích HTML, chúng tôi sử dụng [BeautifulSoup] (http://www.crummy.com/software)/BeautifulSoup /). Xem http://stackoverflow.com/a/1732454/78845 – Johnsyweb

Trả lời

13

Bạn đang tìm kiếm số re module của python.

Hãy xem re.findallre.search.

Và như bạn đã đề cập, bạn đang cố phân tích cú pháp sử dụng html html parsers cho điều đó. Có một vài tùy chọn có sẵn trong python như lxml hoặc BeautifulSoup.

Hãy xem này Why you should not parse html with regex

+0

Cảm ơn các quý ông đã trả lời. Tôi đã bắt đầu sử dụng Beatifulsoup và tôi đang gặp phải một số vấn đề khi sử dụng nó. Tôi đã thông qua các dữ liệu html để Beatifulsopu và tôi đang phải đối mặt với lỗi này. soup = BeautifulSoup (dữ liệu) in soup.prettify() dòng 52, trong soup = BeautifulSoup (dữ liệu) Tệp "/home/infoken-user/Desktop/lin/BeautifulSoup.py", dòng 1519, trong __init__ BeautifulStoneSoup .__ init __ (self, * args, ** kwargs) Tệp "/home/infoken-user/Desktop/lin/BeautifulSoup.py", dòng 1144, .. '^ <\?. * encoding = [\' "] (. *?) [\ '"]. * \?>'). khớp (xml_data) LoạiError: chuỗi hoặc bộ đệm dự kiến – funnyguy

1

tôi nghĩ rằng bạn cần somthing như thế: (? S)

output = re.search('a class="title"(.*?)<\/a>', input, flags=re.IGNORECASE) 
    if output is not None: 
     output = output.group(0) 
     print(output) 

bạn có thể thêm vào bắt đầu regex để bật chế độ nhiều dòng:

output = re.search('(?s)a class="title"(.*?)<\/a>', input, flags=re.IGNORECASE) 
    if output is not None: 
     output = output.group(0) 
     print(output) 
Các vấn đề liên quan