2012-01-30 17 views
10

Planuję przenieść jeden z moich skrobaczek do Pythona. Czuję się komfortowo przy użyciu preg_match i preg_match_all w PHP. Nie znajduję odpowiedniej funkcji w Pythonie podobnej do preg_match. Czy ktoś mógłby mi w tym pomóc?Odpowiednik preg_match PHP w Pythonie

Na przykład, jeśli chcę, aby uzyskać zawartość między <a class="title" i </a>, używam następujące funkcję w PHP:

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

Natomiast w Pythonie nie jestem w stanie wymyślić podobną funkcję.

+1

Oto pytanie hon regex docs: http://docs.python.org/howto/regex.html –

+2

W Pythonie nie używamy wyrażeń regularnych do parsowania HTML, używamy [BeautifulSoup] (http://www.crummy.com/software/BeautifulSoup /). Zobacz http://stackoverflow.com/a/1732454/78845 – Johnsyweb

Odpowiedz

13

Poszukujesz Pythona re module.

Spójrz na re.findall i re.search.

A jak już wspomniano, próbujesz parsować html, używając do tego celu html parsers. Istnieje kilka opcji dostępnych w pythonie, takich jak lxml lub BeautifulSoup.

Spójrz na tego Why you should not parse html with regex

+0

Dziękuję panom za odpowiedzi. Zacząłem używać Beatifulsoup i mam problemy z jego używaniem. Przekazałem dane html do Beatifulsopu i mam do czynienia z tym błędem. soup = BeautifulSoup (data) print soup.prettify() linia 52, w zupa = BeautifulSoup (dane) Plik "/home/infoken-user/Desktop/lin/BeautifulSoup.py", wiersz 1519, w __init__ BeautifulStoneSoup .__ init __ (self, * args, ** kwargs) Plik "/home/infoken-user/Desktop/lin/BeautifulSoup.py", wiersz 1144, .. '^ <\?. * kodowanie = [\' "] (. *?) [\ '"]. * \?>'). match (xml_data) TypeError: oczekiwany ciąg lub bufor – funnyguy

1

myślę, że trzeba somthing tak: (? S)

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

można dodać u początek regex, aby włączyć tryb multilinii:

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