Wyrażenia regularne – jak zaoszczędzić kupę czasu

Czym są wyrażenia regularne? Ciężko mi zdefiniować, ale w pewnym uproszczeniu jest to wzorzec jaki ma znaleźć edytor tekstu. Przykładowo chcąc znaleźć w Wordzie jakiś ciąg znaków i zastąpić go innym wpisujemy słowo którego szukamy i słowa na jakie to słowo ma być zamienione. Nie jest to typowe wyrażenie regularne. Wyrażenie regularne ma bardziej ogólną postać np. znajdź wszystkie ciągi znaków, które się składają z pierwszej dużej litery, dowolnej ilości małych liter i dowolnej ilości cyfr zakończonych enterem 🙂 Właśnie ta pewna ogólność jest prawdziwą potęgą. Podam konkretny przykład: robiłem mini stronę recenzującą pewną dużą książkę. Znalazłem w formacie PDF spis treści tej książki. Spis treści miał postać:
numer paragrafu | nazwa paragrafu | dużo kropek | numer strony
chcąc na mini stronie zamieścić spis treści stwierdziłem, że owe kropki i numer strony to zbędna informacja (niezbyt ładnie wyglądają te kropki a za względu na inną czcionkę w PDFie i na stronie WWW wcale numery stron nie są ładnie ułożone w słupku po prawej stronie). Poza tym kogo interesuje na której stronie jest opisany dany podpunkt, potencjalny klient chce tylko wiedzieć jakie zagadnienia są opisane w tej ksiażce. Ponieważ książka była gruba, więc sam spis treści zajmował 500 linijek 😉 Ręczne usuwanie kropek i numerów stron nie było wygodne (może jak bym się sprężył i odpowiednio wykorzystał skróty klawiaturowe to bym to pewnie zrobił w 15 minut, jednak praca by była dość intensywna i monotonna). Prędzej bym ocipiał niż to zrobił 🙂 Innym pomysłem jest napisanie programiku przetwarzającego plik tekstowy ale tu bym pewnie siedział z 20 minut i na dodatek bym musiał testować zanim by się okazało, że program robi dokładnie to co chcę (np. przy okazji nie usuwa czegoś innego). Z pomocą przyszły mi właśnie wyrażenia regularne

Moja wiedza o wyrażeniach regularnych nie jest super duża, ale jakoś metodą prób i błędów znalazłem odpowiednie wyrażenie regularne. Posiadam dość dobry edytor tekstów: EditPadPro który ma fajną opcję szukaj i zastąp otóż można mu wpisać wyrażenie regularne które ma zastąpić jakimś tekstem (w moim wypadku wpisałem jeśli znajdziesz ciąg składający się z minimum 2 kropek, które później są zakończone dowolną liczbą cyfr to zastąp to pustym ciągiem znaków). Tak też zrobiłem i w kilka sekund spis treści został bardzo ładnie przefiltorowany 🙂 Dlaczego ciąg miał się składać z 2 kropek? Otóż gdyby składał się tylko z 1 kropki to ucierpiały by numery paragrafów gdyż przykładowo w paragrafie nr 1.10 ten ciąg by spełniał warunek (kropka i dowolna ilość cyfr).

A oto wyrażenie regularne, które wpisałem (przyda się dla potomności):
\.\.+[0-9]+

\. oznacza kropkę (kropka pełni specjalne funkcje więc jeśli chcemy wyszukiwać kropki to poprzedzamy ją znakiem \.) Następnie mamy \.+ co oznacza szukaj kropki lub wielu kropek. [0-9] oznacza, że szukamy dowolnej cyfry a + stojący za tym nawiasem oznacza, że szukamy liczby, która może składac się z jednej lub kilku cyfr. Podsumowując wydałem takie polecenie:
– znajdź kropkę
– sprzawdź czy następny znak to też kropka (może być ich wiele)
– jak skończą się kropki to sprawdź czy następnej znaki to cyfry
jeśli wszystkie 3 warunki są spełnione to znaleziony ciąg znaków jest zamieniany na pusty ciąg znaków (czyli znaleziony ciąg znaków jest usuwany z dokumentu).

Być może moje wyrażenie regularne da się uprościć. Nie wiem, nie znam się na tym jeśli chodzi o wyrażenia regularne to łyknąłem jedynie elementarne podstawy. Jednak znajomość tych elementarnych podstaw często mi oszczędza kupę czasu. Dlatego warto jest się zaopatrzyć w dobry edytor tekstu obsługujący wyrażenia regularne i poznać elementerne podstawy związane z wyrażeniami regularnymi!

Comments are closed.