Regular Expression - ściągawka
Moja ściągawka Regular Expression (zapewne tylko do użytku własnego)…
Głównie dotyczy Notepad++ - zob. Notepad++ User Manual - Searching
Znaki specjalne
Dla znajdź (» PerlRegExp)
.[{}()\*+?|^$
Czasem zalecane jest też traktowanie ]
jako znaku specjalnego
W zbiorze znaków “jeden z” lub “żaden z” po [
lub [^
…
]\-^
, przy czym -
na początku lub końcu i ^
nie-na-początku nie jest zn. specjalnym
Dla zamień (» PerlRegExp repl.)
$\()?:
Opisy na tej stronie
Wyrażenia regularne są pokazywane jako kod z podświetleniem, które pozwala zauważyć spacje, np. poniżej mamy kolejno a<spacja>
i a
:
a
a
Aby wyraźnie zaznaczyć, że część “zamień na” ma być pusta, stosowany będzie znak ¤
np.:
¤
Dla operacji “Znajdź i zamień” będą stosowane zawsze 2 wiersze. Powyższy przykład to zamiana spacji na “nic”.
Gdy chodzi o wyrażenia tylko dla “Znajdź”, to będzie 1 wiersz abo 3+ .
Różne przykłady
- Usuwanie całych wierszy, które nie zaczynają się od “abc” (łącznie z końcem wiersza)
^(?!abc).*\R
¤
\R
ro uniwersalny znak końca wiersza w Notepad++,
np. 2 znaki \r\n
(Windows) lub 1 znak \n
(Unix),
a dokładniej to (?>\r\n|\n|\x0B|\f|\r|\x85|\x{2028}|\x{2029})
.
Nie może być używany wewnątrz [...]
ani (?<...)
.
Krócej - może to być (?>\r\n|\n|\r)
, lub jeśli wiadomo, że mamy tylko pliki tekstowe Windows/Unix to \r?\n
.
- Znajdź cały wiersz, który nie kończy się na “xyz” (w tym pusty)
^.*(?<!xyz)$
- Dowolny ciąg znaków obejmujący także znaki końca wiersza (przydatne w javascript)
[\s\S]*
- Sklejanie pojedynczych liter z kolejnym wyrazem - zamiana na spację nierozdzielającą \xA0 ([Alt+0160]) spacji (1+) poprzedzonej jedną z liter ‘awizou’, po której następuje początek wyrazu:
(?<=\<[awizou]) +\<
\xA0
- Kompletne usuwanie tagu HTML (tu
<(\S+) ...<\/\1>
) z zadanym fragmentem nazwy klasy o ile nie zawiera zagnieżdżeń takich samych tagów jak tag(\S+)
.
<(\S+) class="[^"]*FragmentNazwyKlasy[^>]*>(.*?)<\/\1>
¤
- Scalenie akapitów, np. skopiowanych z PDF - gdy faktyczny podział akapitu wyznacza pusty wiersz, a inne łamania wierszy wewnątrz akapitu należy zamienić na spację. Tzn. mamy pojedyncze łamanie wiersza
\r?\n
z opcjonalną dodatkową spacją?
poprzedzone nie-białym znakiem(?<=\S)
i występującym po łamaniu wiersza nie-białym znakiem(?=\S)
:
(?<=\S) ?\r?\n(?=\S)
- Nie-puste wiersze pliku tekstowego nie rozdzielone pustym wierszem zamień na wiersz rozdzielany tabulacją (kolumny Excela):
\r?\n(?!\r?\n)
\t
- Import e-maili z pliku vCard *.VCF do Excela. Chodzi o wielokrotne dane w pliku VCF w rodzaju:
...
FN:Nazwisko Imię
TEL;TYPE=work:1700000000
EMAIL;TYPE=INTERNET;TYPE=HOME:abc@abc.pl
EMAIL:biuro@abc.pl
ADR;TYPE=work:
...
Plik otwieram w Notepad++ lub innym edytorze z obsługą wyrażeń regularnych (opcja gm
) i zamieniam na kolumny rozdzielone tabulacją, które można skopiować do Excela. Kol. 2 - nazwa wyświetlana (tj. FN), kol. 3 - e-mail. Opcjonalnie kol. 4 i 5 - dalsze emaile. W kol. 1 są śmieci (na końcu)
[\S\s]*?^FN.*:(.+)$[\S\s]*?^EMAIL.*:(.+)$([\r\n]+EMAIL.*:(.+)$)?([\r\n]+EMAIL.*:(.+)$)?
\t$1\t$2\t$4\t$6\n
(lub w Pythonie zamień na: \t\1\t\2\t\4\t\6\n
)
- https://www.regular-expressions.info/
- https://regex101.com/ - testowanie
- Regular_Expressions -> developer.mozilla.org
-
Wyrażenia regularne, Marcin Kuta, AGH (obecnie niedostępne - tu kopia w formacie MarkDown): RegEx-Marcin_Kuta,_AGH.md …html
- zob. też: Przydatne znaki unicode