Wśród nowych funkcji dołączonych do programu Calc pojawiła się ta, którą opisuję poniżej. Jest na tyle interesująca, że warto jak sądzę poświęcić jej post, zwłaszcza, że - gdy piszę ten tekst - w systemie pomocy (wersji 6.4.7) jedyne polskie słowa w jej opisie, to: "Składnia" i "Przykłady".
REGEX( Tekst ; Wzorzec [ ; [ Zamiennik ] [ ; Flagi|Powtórzenie ] ] )
Funkcja REGEX wykonuje działanie na tekście źródłowym, który jest pierwszym argumentem tej funkcji. Funkcja odnajduje w tym tekście fragment dopasowany do wzorca podanego jako drugi argument.
Drugi argument funkcji jest traktowany jak wyrażenie regularne (także wtedy, gdy w opcjach programu Calc wybrano nieobsługiwanie w formułach wyrażeń regularnych), dlatego, gdy wzorcem jest tekst podawany wprost, wszystkie znaki tego tekstu, które mogłyby zostać zinterpretowane jako znaki wyrażenia regularnego, należy poprzedzić znakiem odwrotnego ukośnika (\).
Znakami o specjalnym znaczeniu w wyrażeniach regularnych są: * ? + [ ] ( ) { } ^ $ | \ . (kropka też jest znakiem specjalnym). Wielkość liter ma znaczenie.
Gdy funkcja ma podane tylko dwa parametry, zwraca ten fragment tekstu źródłowego, który jest dopasowany do wzorca.
REGEX("Jana Pawła II 1234/6";"23") zwróci ciąg 23, gdyż takie dopasowanie zostało znalezione.
REGEX("Jana Pawła II 1234/6";"\d{2}"), zwróci ciąg 12, gdyż wzorzec określa konieczność znalezienia ciągu złożonego z dwóch dowolnych cyfr, a 12 jest pierwszym takim ciągiem.
Jeśli żaden fragment tekstu źródłowego nie pasuje do wzorca, zwracany jest wynik #N/D.
Trzeci argument funkcji to zamiennik dla dopasowanego fragmentu. Funkcja zwróci tekst źródłowy, zastępując dopasowany do wzorca fragment – zamiennikiem.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx") zwróci: Jana Pawła II xxxx34/6, zastępując dopasowany ciąg (12) zamiennikiem (xxxx). Jeżeli żaden fragment tekstu źródłowego nie zostanie dopasowany do wzorca, zwrócony zostanie oryginalny tekst źródłowy.
Czwarty argument funkcji może określać flagę albo powtórzenie. Flagą może być litera „g” (tylko mała) oznaczająca, że zamiennik ma zostać zastosowany do każdego dopasowanego fragmentu tekstu źródłowego.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx";"g") zwróci: Jana Pawła II xxxxxxxx/6. Najpierw zostanie zamieniony pierwszy dopasowany fragment (12), a następnie drugi (34).
Jeśli ostatnim argumentem jest liczba, to określa ona, który dopasowany do wzorca fragment ma zostać zwrócony albo zamieniony. Gdy liczbą jest zero, zawsze zwrócony zostanie ciąg źródłowy bez żadnych zmian.
REGEX("Jana Pawła II 1234/6";"\d{2}";;2) zwróci ciąg 34, gdyż jest to drugi ciąg, który jest dopasowany do wzorca. Jeśli taki ciąg nie zostanie dopasowany, zostanie zwrócony wynik #N/D.
REGEX("Jana Pawła II 1234/6";"\d{2}";"xxxx";2) zwróci Jana Pawła II 12xxxx/6, gdyż drugim dopasowanym ciągiem jest 34 i to ten ciąg zostanie zastąpiony zamiennikiem. Gdy wzorzec nie zostanie dopasowany, zwrócony będzie oryginalny tekst źródłowy.
Funkcja REGEX w Calc (tylko LibreOffice)
Funkcja REGEX w Calc (tylko LibreOffice)
Ostatnio zmieniony pt sty 08, 2021 8:32 pm przez Jermor, łącznie zmieniany 2 razy.
Powód: Dołączyłem ankietę, aby zobaczyć jak to funkcjonuje.
Powód: Dołączyłem ankietę, aby zobaczyć jak to funkcjonuje.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Funkcja REGEX w Calc (tylko LibreOffice)
Bardzo dobry opis. Jako, ze bardzo duzo wynioslem z tego forum i korzystalem rowniez z tego opisu czuje sie zobowiazany dorzucic cegielke.
Odnosnie rozpoznawania wielkosci liter oraz polskich znakow. Jak ktos ma lepsze rozwiazanie to zamieniam sie w sluch![Smile :)](./images/smilies/icon_smile.gif)
Ja robie tak.
Wyszukiwany wyraz "Kąt" wypisuje: "[Kk][Aaą][Tt]". Przykryte wszystkie kombinacje.
Rozwiazanie lopatologiczne, ale dziala![Smile :)](./images/smilies/icon_smile.gif)
Odnosnie rozpoznawania wielkosci liter oraz polskich znakow. Jak ktos ma lepsze rozwiazanie to zamieniam sie w sluch
![Smile :)](./images/smilies/icon_smile.gif)
Ja robie tak.
Wyszukiwany wyraz "Kąt" wypisuje: "[Kk][Aaą][Tt]". Przykryte wszystkie kombinacje.
Rozwiazanie lopatologiczne, ale dziala
![Smile :)](./images/smilies/icon_smile.gif)
LibreOffice na Windows 10 Wersja: 6.4.3.2 (x64)
Re: Funkcja REGEX w Calc (tylko LibreOffice)
Jeżeli szukasz ciągu, który może być zapisany literami wielkimi i małymi postawionymi w przypadkowy sposób, np. PrZeKrÓj (chociaż w rzeczywistości chodzi zazwyczaj o sytuacje: przekrój, Przekrój lub PRZEKRÓJ), łatwiej osiągniesz to takim sposobem (nie tylko w REGEX)
Wyszukiwany ciąg to: przekrój, przeszukiwany ciąg to: LITERY.MAŁE(tekst źródłowy). W przypadku funkcji REGEX tekstem źródłowym może być tekst "Tygodnik PRZEKRÓJ prezentuje przekrój rozmaitych poglądów na kulturę", zawarty w komórce A1 a funkcja może wówczas wyglądać tak:
=REGEX(LITERY.MAŁE(A1);"przekrój")
Jeżeli wyszukiwany tekst także znajduje się w komórce (nie jest wpisany bezpośrednio do formuły) należałoby także i ten tekst poddać funkcji LITERY.MAŁE(), wówczas wszystkie litery w obu ciągach są jednakowej wielkości.
Oczywiście zamiennie można wykorzystać funkcję LITERY.WIELKIE()
Odrębnym problemem są litery charakterystyczne dla naszego języka. Są one prawidłowo rozpoznawane, jednak w wyrażeniach regularnych zawierających konstrukcję [a-z] nie będą rozpoznane, gdyż ich kody polskich liter znajdują się poza zakresem liter od "a" do "z". Zapis [a-ż] uwzględni wszystkie polskie litery. Analogicznie - [A-Ż]. Gdy jednak chcemy uwzględnić wszystkie litery polskiego alfabetu w ograniczonym zakresie liter, np. od "a" do "d" musimy to zapisać tak: [a-dąć].
Ciekawostka: Na pytanie, jaka jest druga litera alfabetu, najczęstszą odpowiedzią jest "b" a nie "ą".
Wyszukiwany ciąg to: przekrój, przeszukiwany ciąg to: LITERY.MAŁE(tekst źródłowy). W przypadku funkcji REGEX tekstem źródłowym może być tekst "Tygodnik PRZEKRÓJ prezentuje przekrój rozmaitych poglądów na kulturę", zawarty w komórce A1 a funkcja może wówczas wyglądać tak:
=REGEX(LITERY.MAŁE(A1);"przekrój")
Jeżeli wyszukiwany tekst także znajduje się w komórce (nie jest wpisany bezpośrednio do formuły) należałoby także i ten tekst poddać funkcji LITERY.MAŁE(), wówczas wszystkie litery w obu ciągach są jednakowej wielkości.
Oczywiście zamiennie można wykorzystać funkcję LITERY.WIELKIE()
Odrębnym problemem są litery charakterystyczne dla naszego języka. Są one prawidłowo rozpoznawane, jednak w wyrażeniach regularnych zawierających konstrukcję [a-z] nie będą rozpoznane, gdyż ich kody polskich liter znajdują się poza zakresem liter od "a" do "z". Zapis [a-ż] uwzględni wszystkie polskie litery. Analogicznie - [A-Ż]. Gdy jednak chcemy uwzględnić wszystkie litery polskiego alfabetu w ograniczonym zakresie liter, np. od "a" do "d" musimy to zapisać tak: [a-dąć].
Ciekawostka: Na pytanie, jaka jest druga litera alfabetu, najczęstszą odpowiedzią jest "b" a nie "ą".
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.