Zaimplementuj wyrażenia regularne z następującymi specjalnymi znakami: . (kropka) dopasowuje dowolny pojedynczy znak x* (gwiazdka) dopasowuje zero lub więcej znaków x
Tj. zaimplementuj funkcję, która przyjmuje dwa argumenty: napis s oraz poprawne wyrażenie regularne r i zwraca prawdę wtedy i tylko wtedy, kiedy wyrażenie r całkowicie dopasowuje się do s.
np. dla s="Mirek" i r="M.rek" -> true s="Mirek" i r=".*" -> true s="Mirek" i r="Mirabella" -> false
@NotABigFan: kurcze wstyd. Program działa w taki sposób, że mam dwa wskaźniki, jeden na s, drugi n r. Lecę po każdym znaku z s i porównuję z r. Jeśli napotkam . to wiadomo, iteruję dalej, jeśli natomiast znajdę w r * to lecę wkolejnej pętli porównując kolejne znaki z s ze znakiem r(wskaznikR - 1) aż do końca patternu. Jeśli dojdę do końca s, to uważam, że pattern r pasuje
@NotABigFan: nie rozumiem też dlaczego ten pattern, który pokazałeś, że działa u mnie źle powinien działać dobrze. Wiem, że powinno być true bo sprawdziłem w prawdziwym regexie, ale nie rozumiem dlaczego, skoro jest w patternie ka*, a w source nie ma ciągu 'ka'.
@passage: gwiazdka oznacza zero lub więcej elementów. Czyli jak masz w patternie 'ka*' to w tekście może nie być w ogóle a, tj. może zostać pominięte. Pojedynczy wskaźnik na pewno nie da dobrej odpowiedzi bo w momencie w którym natrafiasz na gwiazdkę czasem dobrze jest ją pominąć w ogóle a czasem ta gwiazdka może oznaczać dwa znaki a czasem więcej.
Zaimplementuj wyrażenia regularne z następującymi specjalnymi znakami:
. (kropka) dopasowuje dowolny pojedynczy znak
x* (gwiazdka) dopasowuje zero lub więcej znaków x
Tj. zaimplementuj funkcję, która przyjmuje dwa argumenty: napis s oraz poprawne wyrażenie regularne r i zwraca prawdę wtedy i tylko wtedy, kiedy wyrażenie r całkowicie dopasowuje się do s.
np. dla s="Mirek" i r="M.rek" -> true
s="Mirek" i r=".*" -> true
s="Mirek" i r="Mirabella" -> false
#dailycodingproblem #programowanie
znalazłem również błąd u Ciebie:
assert match("Mirek", ".**") # przechodzi, a nie powinno
self.loop or
) żebyassert not match("mississippi", "mis*is*p*.")
przeszedł.Możesz sobie przetestować tu: https://leetcode.com/problems/regular-expression-matching/ masz tam jeszcze alternatywne rozwiązania z tego co widzę bez symulowania automatu ( ͡° ͜ʖ ͡°)