admin
24 czerwca, 2024
Czy czujesz czasem, że toniesz w morzu danych w Excelu lub Arkuszach Google? Wyobraź sobie, że możesz błyskawicznie wyszukiwać, filtrować i przekształcać informacje z precyzją lasera. Witaj w świecie wyrażeń regularnych (regex)! W tym artykule odkryje przed Tobą, jak ta potężna technika może zmienić sposób, w jaki pracujesz z arkuszami kalkulacyjnymi. Od czyszczenia danych po zaawansowaną analizę tekstu – regex to klucz do uwolnienia pełnego potencjału Twoich arkuszy. Przygotuj się na podróż, która odmieni Twoje podejście do pracy z danymi i wyniesie Twoje umiejętności na nowy poziom!
Czy zdarzyło Ci się kiedyś szukać w internecie konkretnego fragmentu tekstu, kodu lub pliku? A może próbowałeś wyodrębnić dane z tabeli lub pliku CSV? Jeśli tak, to z pewnością zetknąłeś się z pojęciem wyrażeń regularnych, nawet jeśli nie zdawałeś sobie z tego sprawy.
Wyrażenia regularne to wzorce, które służą do opisywania i wyszukiwania określonych łańcuchów znaków w tekstach. Innymi słowy, pozwalają zdefiniować, co dany tekst zawiera lub jak jest zbudowany.
Na wyrażenia regularne zwykle mówi się REGEX, co jest skrótem dla wyrażeń regularnych w języku angielskim – Regular Expressions.
Przykład zastosowania REGEX do znalezienia w tekście wszystkich słów kończących się na literę “a”.
Wyrażenia regularne zapewniają możliwość zdefiniowania praktycznie każdej sekwencji znaków zależnie od potrzeb i od specyfikacji pożądanego tekstu, w którym szukamy danego fragmentu.
Wyrażeniem regularnym może być jakikolwiek znak lub ciąg znaków. Z wyjątkiem znaków specjalnych np. *, + lub ?.
Chcąc znaleźć w tekście słowa “tata” wystarczy wpisać jako wyrażenie regularne “tata”.
Natomiast, aby znaleźć w tekście wszystkie czteroliterowe słowa, które na drugim i ostatnim miejscu mają literę “a” trzeba zastosować bardziej skomplikowany wzorzec.
Zapisywany jako pionowa kreska ( | ) służy do dopasowania jednego z podanych wzorców. Innymi słowy, wyrażenie z operatorem „lub” zwraca dopasowanie, jeśli jeden lub więcej jego pod-wzorców pasuje do ciągu.
| – Przykład zastosowania operatora “lub”. Słowo “Kotek” nie zostało dopasowane do wzorca, ponieważ zaczyna się od wielkiej litery, za to słowo “pies” zostało znalezione.
Służą do definiowania grup znaków, które mają zostać dopasowane. Innymi słowy, określają one zbiór symboli, z których co najmniej jeden musi wystąpić w danym miejscu wzorca.
\d lub [0-9] – wszystkie cyfry
\D lub [^0-9] – wszystko oprócz cyfr
\w lub [0-9A-Za-z_]] – wszystkie znaki
\W lub [^0-9A-Za-z_] – wszystko oprócz znaków
\s – wszystkie znaki niedrukowane (małe litery)
\S – wszystko oprócz znaków niedrukowanych (wielkie litery)
\d – Znajduje wszystkie cyfry. Warto zwrócić uwagę, że liczba 30 została zaklasyfikowana jako dwie osobne cyfry, a nie jedna liczba.
[a-zA-Z-żźćńółęąśŻŹĆŃÓŁĘĄŚ] – Znajduje wszystkie litery. Aby znaleźć również polskie znaki, należy je osobno wpisać do wyrażenia regularnego.
Umożliwiają organizowanie i manipulowanie częściami wzorca, który wyrażenie regularne próbuje dopasować. Grupy pozwalają na dzielenie wyrażeń na mniejsze fragmenty oraz na zapamiętywanie dopasowanych tekstów, co jest szczególnie użyteczne w przypadku bardziej zaawansowanych operacji.
Grupowanie wykonuje się za pomocą znaków ( ).
Przykład zastosowania grupowania. Pomimo że obydwa słowa “kot” i “pies”, ujęte w grupie ( ), pasują do wzorca to tylko po słowie “kot” następuje słowo “biega”, określonego po zwrocie \s+.
Określają pozycję, w której musi nastąpić dopasowanie wzorca w tekście. Innymi słowy, ograniczają zakres wyszukiwania, precyzując, gdzie w łańcuchu znaków wzorzec ma być znaleziony.
^x – wyrażenie zaczynające się od x
x$ – wyrażenie kończące się na x
\bxxx\b – wyrażenie składające się z xxx przed i po którym jest odstęp
^x – Przykład zastosowania kotwicy: w tekście kilka słów zaczyna się od “wyr”, ale dopasowane zostało tylko to na początku wyrażenia.
x$ – Ponieważ większość żeńskich imion w języku polskim kończy się na literę “a”, można łatwo sprawdzić, czy podane imię jest żeńskie czy męskie.
To symbole, które określają liczbę wystąpień danego elementu (litery, sekwencji znaków, grupy znaków). Innymi słowy, precyzują, ile razy dany fragment wzorca ma być znaleziony w tekście. Domyślnie kwantyfikatory są chciwe (greedy), co oznacza, że dopasowują jak najdłuższy ciąg znaków spełniający wzorzec.
x* – zero lub więcej powtórzeń x
x+ – jedno lub więcej powtórzeń x
x? – zero lub jedno powtórzenie x
x{2} – dokładnie dwa powtórzenia x
x{2,} – dwa lub więcej powtórzeń x
x{2, 5} – od dwóch do pięciu powtórzeń x
x{2,4} – Przykład użycia kwantyfikatora, który szuka dokładnie od dwóch do czterech powtórzeń słowa “kot”.
Kwantyfikatory można podzielić na dwie grupy: leniwe (lazy) i chciwe (greedy).
Leniwe kwantyfikatory są przydatne, aby dopasować minimalną ilość znaków lub uniknąć dopasowywania nadmiarowych znaków.
zykład leniwego kwantyfikatora: wyrażenie również dopasuje tekst rozpoczynający się od litery “a” i kończący na literę “b”, ale leniwy kwantyfikator .*? dopasuje jak najmniej znaków pomiędzy literami “a” i “b”.
Chciwe kwantyfikatory są przydatne, aby dopasować cały ciąg znaków lub gdy kolejność znaków ma znaczenie.
Przykład chciwego kwantyfikatora: wyrażenie dopasuje tekst rozpoczynający się od litery “a” i kończący na literę “b”’, przy czym chciwy kwantyfikator .* dopasuje jak najwięcej znaków pomiędzy literami “a” i “b”.
Tutaj możesz skopiować plik Google Sheets, na którym pracowałem: KLIK
Sprawdza, czy w danym ciągu tekstowym występuje fragment pasujący do wyrażenia regularnego, jeśli tak, zwraca wartość PRAWDA()
Sprawdź, czy komórki zawierają kody pocztowe w formacie 00-000:
=REGEXMATCH(C4; "[0-9]{2}-[0-9]{3}")
gdzie:
[0-9]{2}–[0-9]{3}
[0-9] znajdź jakąkolwiek cyfrę
{2} powtórz dwukrotnie poprzednie wyrażenie: znajdź dwie jakiekolwiek cyfry
– następnie znajdź znak myślnika
[0-9] znajdź jakąkolwiek cyfrę
{3} powtórz trzykrotnie poprzednie wyrażenie: znajdź trzy jakiekolwiek cyfry
W skrócie – to wyrażenie szuka w tekście dwóch cyfr, po których występuje myślnik, po którym występują trzy cyfry, razem tworzące kod pocztowy.
Przykład zastosowania formuły regexmatch().
Sprawdza, czy w danym ciągu tekstowym występuje fragment pasujący do wyrażenia regularnego, jeśli tak, zwraca pierwszy pasujący fragment tekstu.
Wyodrębnij numery telefonów z tekstu:
=REGEXEXTRACT(A5; "\d{3} \d{3} \d{3}")
gdzie:
\d{3} \d{3} \d{3}
\d znajdź jakąkolwiek cyfrę
{3} powtórz poprzednie wyrażenie trzykrotnie: znajdź trzy jakiekolwiek cyfry
znak spacji
Przykład zastosowania formuły regexextract().
Sprawdza, czy w danym ciągu tekstowym występują fragmenty pasujące do wyrażenia regularnego, jeśli tak, zmienia wszystkie fragmenty na podany zamiennik.
Zamień zwierzę w wierszyku z “kota” na “psa”:
=REGEXREPLACE(A2; "kota"; "psa")
Przykład zastosowania formuły regexreplace().
Formuła ta może zostać wykorzystana również do zamiany pozycji fragmentów tekstu poprzez możliwości grupowania. Dzięki nawiasom ( ) można stworzyć wiele grup, a następnie odwoływać się do nich za pomocą znaku dolara i numeru grupy $1.
=REGEXREPLACE(A5; "(\w+)(?:, )(\w+)"; "$2 $1")
Przykład zastosowania grupowania i zamiany tekstu dzięki znakom $. Regex odnajduje w tekście dwa słowa jako dwie grupy, a następnie wstawia je w odwrotnej kolejności.
Formuły korzystające z wyrażeń regularnych można również łączyć z innymi formułami, by tworzyć bardziej zaawansowane funkcje. Przykładem może być funkcja FILTER.
Wyświetl tylko wiersze, gdzie w kolumnie „Nazwa” jest „kot” i w kolumnie „Kolor” jest „czarny”:
=FILTER(A5:B11; (REGEXMATCH(A5:A11;"kot"))*(REGEXMATCH(B5:B11;"czarn")))
astosowanie wyrażeń regularnych do znalezienia wszystkich kotów, które mają czarne umaszczenie.
Więcej informacji znajdziesz w artykule:
Wyrażenia regularne są potężnym narzędziem do manipulacji i analizy tekstu, choć początkowo mogą wydawać się skomplikowane. Dzięki nim można efektywnie wyszukiwać, wyciągać i przetwarzać informacje w sposób dokładny i zautomatyzowany.
Jeśli chcesz dalej zgłębiać możliwości wyrażeń regularnych, polecam stronę: https://regexlearn.com/
Wyrażenia regularne możesz testować na stronie: https://regex101.com/
A po szczegółowy opis i przykłady standardu RE2, w jakim zapisywane są wyrażenia regularne w usługach Google, możesz sięgnąć na strone: https://github.com/google/re2/wiki/Syntax