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)