Wyrażenia regularne, problem ze wzorcem

0

Eksperymentuję trochę z wyrażeniami regularnymi w Pythonie i opracowałem taki wzorzec:
\d{2}(?=60)/b

Dziwi mnie bardzo czemu nie działa na:

606050 605038 601492
405060 606060 602603

jak dla mnie powinien zaznaczyć:

606050 605038 601492
405060 606060 602603

Co źle rozkminiłem? :(
Reszta wzorców dla reszty konstrukcji przewidywania działa poprawnie.

0

Do czego jest to b? Bo /b nic nie znaczy, a \b nie ma sensu, jeśli chcesz uzyskać rezultat, jak na przykładzie.

\d{2}(?=60) zaznacza, to co wskazałeś, a nawet więcej https://regexr.com/

Może napisz najpierw, jaki efekt chcesz uzyskać, bo bez tego trudno cokolwiek radzić :)

1

\b to od word boundary.

\d{2}(?=60\b) powinno działać. W sumie jak jest lookahead to również boundary jest lookahead'owane.

0

@0xmarcin:
Ma to sens, zwłaszcza że działa. Wydawało mi się, że moje też powinno działać, dużo jeszcze przede mną.

Pomożesz mi jeszcze to ogarnąć:
(?!60)\d{2}\b
606050 605038 601492
405060 606060 602603

Czemu tu działa: 606050 ?

0

Zaczęło mnie zastanawiać jedno, gdy zaproponowałeś poprawiony wzorzec (?<!60)\d{2}\b to dochodzę do wniosku, że źle stworzyłem wzorzec i zły dobrałem przykład. Chodzi głównie o zasadę wyszukiwania, kolejność we wzorcu. Zaraz wyedytuję i pokaże podsumowanie :)

Ja to widzę tak dla słów:

xy  xz  yx  zx

przy wzorcu: x(?=y)
znajduje x tylko wtedy gdy po x jest y
xy xz yx zx

przy wzorcu: x(?!y)
znajduje x tylko wtedy gdy po x nie ma y
xy xz yx zx

Błędny wzorzec: (?!y)x bo to jest to samo co wzorzec: x i da w efekcie: xy xz yx zx

przy wzorcu: (?<=y)x
znajduje x tylko wtedy gdy zaraz przed x jest y
xy xz yx zx

przy wzorcu: (?<!y)x
znajduje x tylko wtedy gdy przed x nie ma y
xy xz yx zx
dwa pierwsze x nie mają y przed sobą, zatem też pasują do wzorca. Można tu obarczyć prostotę przykładu, ale pokazuje słabości przed którymi trzeba się zabezpieczyć. Ja zakładam, że interesuje mnie koniec słowa i chce osiągnąć taki efekt: xy xz yx zx więc należy:
poprawić wzorzec na: (?<!y)x\b

Błędny wzorzec: x(?!y) bo to jest to samo co wzorzec: x i da w efekcie: xy xz yx zx

Czy to wszystko jest przydatne, jak zakładam że warto to znać bo wyrażeniami regularnymi można dużo i szybko osiągnąć (choć mało jeszcze wiem). Tak na szybko szukając zastosowanie dla przewidywania to zamiast wyszukiwać dopasowania ze zbędnym tekstem można użyć wzorca: (?<=href=\").*(?=:) i wyciągnąć sam rodzaj protokołu <a class="link" href="https://takiadres.pl/</a>

Dodając do aseracji jeszcze alternatywę będzie dopiero można zaszaleć :D Ciekawe czy można połączyć przewidywania z konstrukcją grupowania wstecznego?

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