Niedawno przechodziłem na pythona i jestem zainteresowany oczyszczeniem bardzo dużej liczby stron internetowych (około 12k) (ale można go uznać za równie łatwo pliki tekstowe), usuwając jakieś konkretne znaczniki lub inne wzory ciągu. W tym przypadku używam funkcji RE.SUB (..) w Pythonie.

Moje pytanie brzmi: jeśli jest to lepsze (z punktu widzenia wydajności), aby stworzyć jeden duży wyrażenie regularne, które pasuje do bardziej moich wzorów lub połączyć funkcję kilka razy z mniejszymi i prostszymi wyrażeniami regularnymi.

Aby złużyć, czy lepiej jest używać czegoś podobnego

 re.sub(r"<[^<>]*>", content)
 re.sub(r"some_other_pattern", content)

Lub

 re.sub(r"<[^<>]*>|some_other_pattern",content)

Oczywiście, ze względu na przykładem przykładu poprzedniego wzorców jest naprawdę proste i nie skompilowałem ich tutaj, ale w moim scenariuszu prawdziwego życia będę.

LE: Pytanie nie jest związane z natury HTML plików, ale do zachowania Pythona podczas radzenia sobie z wieloma wzorami REGEX.

Dzięki!

6
Cosmin SD 24 wrzesień 2012, 03:38

2 odpowiedzi

Mówiąc ogólnie, "sekwencyjna" i "równoległa" aplikacja nie jest taka sama i może wytwarzać różne wyniki, ponieważ wymiany sekwencyjne mogą wpływać na siebie.

Jeśli chodzi o wydajność, myślę, że jedno wyrażenie będzie działać lepiej, ale to tylko przypuszczenie. Osobiście wolę przechowywać wtedy kompleksować i używać trybu "Verbose" do odczytywności.

2
georg 24 wrzesień 2012, 06:38

Rozumiem swój dodatkowy komentarz dotyczący "jego części nie-HTML, które sprzątam". Z powodu możliwości ostatniego znalezienia i zastępowania treści, które wcześniej wymieniono, lepiej byłoby użyć "alternatywnego operatora i za pomocą jednego RE.

Również rozważ się używanie BeautifulSoup do załadowania i zbadania plików HTML. Pomoże to w znalezieniu odpowiednich części tekstu o znacznie mniejszym ryzyku przechwytywania niektórych konstruktów HTML, gdy właśnie zamierzasz wymienić tekst.

1
Chris Cogdon 22 listopad 2012, 21:48