Regex

0

Witam,
Chciałbym wyciągnąć wszystko co znajduje się między tagami <:tbody> i </:tbody>. Jednak wzorzec: <:tbody>(.*)</:tbody> nie działa jakbym sobie tego życzył. Wykracza poza granice </tbody> i bierze wszystkie znaki poza nią. Domyślam się gdzie może leżeć problem, ale nie mam pomysłu jak to rozwiązać. Za wszelką pomoc z góry dziękuję.

2

Od czasu do czasu się to pojawia. Otóż nie można parsować/czytać htmla Regexami, jak potrzebujemy coś co znajduje sie między jakimiś nawiasami/znacznikami to Regexy wymiękają. Zainteresuj się biblioteką beautifulsoup.

0

Właśnie. Rozwiń swoją myśl, proszę. Nie chce stworzyć uniwersalnego parsera na regex'ach tylko parsować dobrze znany mi zbiór, określony ścisłymi zasadami.

1
wowo093 napisał(a):

Właśnie. Rozwiń swoją myśl, proszę. Nie chce stworzyć uniwersalnego parsera na regex'ach tylko parsować dobrze znany mi zbiór, określony ścisłymi zasadami.

W komentarzu odpowiedziałem, po prostu nie ma regexa do rozpoznawania, że nawias się zamknął. Regexy mogą rozpoznać tylko:

  • czy jest to dany string, np., 'a';
  • czy jest to dany znak lub pusty string;
  • czy jest znak lub znak;
  • czy jest to konkatenacja znaków;
  • czy jest dowolna ilośc powtórzeń danego znaku lub pusty znak (tzw. Kleene Star).
    Mając tylko to do dyspozycji nie damy rady zapamietać dany znak i robić coś dopóki go znowu nie zobaczymy - to byłby już język context free.
0
lion137 napisał(a):
wowo093 napisał(a):

Właśnie. Rozwiń swoją myśl, proszę. Nie chce stworzyć uniwersalnego parsera na regex'ach tylko parsować dobrze znany mi zbiór, określony ścisłymi zasadami.

W komentarzu odpowiedziałem, po prostu nie ma regexa do rozpoznawania, że nawias się zamknął. Regexy mogą rozpoznać tylko:

  • czy jest to dany string, np., 'a';
  • czy jest to dany znak lub pusty string;
  • czy jest znak lub znak;
  • czy jest to konkatenacja znaków;
  • czy jest dowolna ilośc powtórzeń danego znaku lub pusty znak (tzw. Kleene Star).
    Mając tylko to do dyspozycji nie damy rady zapamietać dany znak i robić coś dopóki go znowu nie zobaczymy - to byłby już język context free.

Dziękuję za odpowiedzi. W takim razie czy jest coś co mógłbyś mi polecić do parsowania html'a?

0

RegExp wysypie się przede wszystkim na tego typu przykładach:

<tbody>
<!--</tbody>-->

oraz na zagnieżdżonych znacznikach, np:

<div>
  <div>
  </div>
</div>
0

"Dziękuję za odpowiedzi. W takim razie czy jest coś co mógłbyś mi polecić do parsowania html'a?"

Już pisałem, Zobacz beautifulsoup.

1 użytkowników online, w tym zalogowanych: 0, gości: 1