Jak usunąć wszystkie przypisy w tekście skopiowanym z Wikipedii?

Czasem komentarz na blogu może być inspiracją do napisania nowej notki. Jakiś czas temu opisałem symbole wieloznaczne w programie Word (symbole wieloznaczne to taka namiastka wyrażeń regularnych). Pod wpisem pojawił się komentarz z pytaniem, które jest tytułem tego wpisu.

Gdy kopiujesz jakiś fragment tekstu z Wikipedii często jest w nim pełno przypisów. Oto przykładowy fragment wpisu z Wikipedii:  

Kot domowy (Felis catus[1][3], również Felis silvestris catus) – udomowiony gatunek ssaka z rzędu drapieżnych z rodziny kotowatych. Koty zostały udomowione około 9500 lat temu[4] i są obecnie najpopularniejszymi zwierzętami domowymi na świecie[5]. Gatunek ten prawdopodobnie pochodzi od kota nubijskiego, przy czym w Europie krzyżował się ze żbikiem. Przez IUCN/SSC jest uznawany za gatunek inwazyjny[6].

Jak widzimy w tych kilku linijkach znajduje się aż 6 przypisów. Wszystkie przypisy mają pewną wspólną cechę: otóż zaczynają się od kwadratowego nawiasu otwierającego, następnie są cyfry i kończą się kwadratowym nawiasem zamykającym.

Czytelnik mojego bloga miał problem z wymyśleniem odpowiedniego wyrażenia. I na początku ja też. Zacznijmy od czegoś prostszego: każdy przypis to nic innego jak liczba. Załóżmy, że raczej nie ma więcej niż kilkaset przypisów w nawet najdłuższym artykule. Więc nasze wyrażenie z symbolami wieloznacznymi mogłoby wyglądać tak:

[0-9]{1;3}

Czyli usuń wszystkie ciągi znaków składające się z cyfr z zakresu od 0 do 9 o długości od 1 do 3 cyfr.

Niestety, ale to wyrażenie ma dwie wady. Po pierwsze z tekstu zostaną usunięte wszystkie cyfry (również te nie będące pomiędzy kwadratowymi nawiasami) po drugie po takiej operacji zostałyby samotne kwadratowe nawiasy tj. ciąg znaków [1] zostałby zamieniony na [].

Tutaj pojawia się problem – jak ująć te nawiasy w naszym wyrażeniu? W przypadku symboli wieloznacznych znak [ pełni specjalną funkcję (wewnątrz kwadratowych nawiasów umieszczamy np. przedział znaków jakie mają być w naszym wzorcu np. [A-Z]) to trzeba jakoś poinformować Worda, że ten znak [ co chcę wpisać to nie ma być np. początek jakiegoś przedziału a dosłownie chcę z tekstu wyłowić znak [. Tak więc poniższe wyrażenie jest błędne:

[[0-9]{1;3}]

Na początku kombinowałem z jakimś „znakiem ucieczki”. W klasycznych wyrażeniach regularnych jest to znak \. Niestety, ale tutaj to nie zadziałało. Również znak ^ który czasem w symbolach wieloznacznych pełni różne specjalne funkcje tutaj się nie sprawdził.

Ale wpadłem na pewien pomysł. Otóż w kwadratowych nawiasach można zamieszczać albo przedziały znaków takie jak np. [A-Z] albo poszczególne znaki np. wyrażenie k[aoi]t spowoduje że program Word dopasuje do wzorca następujące wyrazy: kot, kat, kit.

Tak więc wpadłem na pomysł: a co by było gdybym w kwadratowych nawiasach umieścił porządny przeze mnie znak nawiasu kwadratowego? O dziwo to rozwiązanie zadziałało. Czyli mój wzorzec składa się z 3 części:

  • [[] – ciąg znaków musi się zaczynać od znaku [
  • [0-9]{1;3} – potem ma się znajdować liczba składająca się od 1 do 3 cyfr
  • []] – wyrażenie musi być zakończone znakiem ]

A więc moje wyrażenie wygląda następująco:

[[][0-9]{1;3}[]]

I w ten oto sposób możemy sprytnie hurtowo usunąć z tekstu wszystkie przypisy.

Jeśli artykuł Ci się podobał, będę wdzięczny gdy go udostępnisz w mediach społecznościowych
Ten wpis został opublikowany w kategorii sztuczki i oznaczony tagami , . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.