Regex - Regular Expressions til tekstbehandling

Ankre i tekst (uden udstrækning)

^ Begyndelse af linie
$ Slutning af linie
\b "Word boundary" - dvs. mellemrum, komma, semikolon, punktum, spørgmålstegn etc.

Tegn-klasser (Character classes)

\d Tal - det modsatte: \D - ikke tal
\w Bogstav - det modsatte: \W - ikke bogstav
\x HexadecimalTal
\s "White space": blanktegn, tabulatortegn
\n New line
NB: i Windows-tekstfiler er linieskift kodet som: \r\n; i OS-X kun: \n, på gamle MAC kun: \r, men i praksis bruges bare \n, hvis man vil indsætte linieskift
\r Carriage return
\t Tabulator tegn

Hvor mange gange match ("Quantifiers")

* 0 eller flere gange
+ 1 eller flere gange
? 0 eller 1 gang
{4} {4,} {3,5} Præcis 4
4 eller flere
3, 4 eller 5

Capturing Groups og intervaller af tal eller bogstaver

. Punktum: Matcher ethvert tegn undtagen linieskift (kan slås til)
…(regex1) … (regex2) …. Runde parenteser: Finder og gemmer (capture) match for de to regex i \1 og \2 (eller $1 og $2).
NB: Brug altid runde parenteser til at afgrænse tekstmønstre - uanset om de skal genanvendes senere.
… [a-zA-ZæøåÆØÅ] … [0-9] …

Firkantede parenteser: Finder alle tegn a-z + æøå - regex skelner mellem små og store bogstaver (kan slås fra) og ethvert tal.

Ved arbejde med "uforudsigelige" kombinationer af ikke-normale bogstaver (der kan matches af [A-Za-zÆØÅæøå]), kan man istedet anvende en "negativ" match: find "alt" der ikke indeholder komma, tab (f.eks. Efternavn, Fornavn(e): ^([^\,\t]*?),[ ]([^\,\t]*?),

Find alle linier der IKKE starter med #: ([^#])(.*?)$ - erstat med \1\2 + det man vil tilføje alle linier, der ikke starter med #

Find alle linier der IKKE indeholder XXXX: ^((?!XXXX).)*$

Alternativ match: (one|two|three) Finder alle forekomster af et af de tre ord - et ad gangen - og gemmer første match i \1
Brug af capturing group i samme match
  • Univ (.*?), \1 - finder f.eks. Univ Amsterdam, Amsterdam
  • ^(.*)(\r?\n\1)+$ - finder dubletlinier i sorteret liste - erstat med \1

Metacharacters - skal altid "escapes" ved søgning, får anden betydning inden i [ ]

  • Venstre skarp parentes "[" - men ikke højre do.
  • Backslash "\"
  • "Hat" (Caret) "^"
  • Dollartegn "$"
  • Punktum "."
  • Lodret streg (vertical bar or pipe symbol) "|"
  • Spørgsmålstegn "?"
  • Stjerne "*"
  • Plus "+"
  • Runde parenteser "(" og ")"

Ved søgning: escape med \.
Inden i [ ]: ^ betyder "ikke" match på følgende regex, f.eks. alle liner der:

  • indeholder 2 blokke tekst adskilt af TAB: ^([^\t]*?)\t([^\t]*?)$
  • IKKE starter med #: ([^#])(.*?)$
  • Linieskift på PC eller MAC: ‹\r?\n›. Ved at gøre CR betinget opnår match på både PC (Windows): CRLF og MAC(Unix) LF
  • Punktum efter tekst, men ikke efter tal: ([^0-9])\. - erstat med: \1

ISSN opretning - bindestreg, venstrestillet nul

Alt om tal


I SCOPUS-poster for ikke-engelsksprogede artikler, f.eks. fra Ugeskrift for Læger, vil den artiklens titel på originalsproget stå sidst i titelfeltet omgivet af skarpe parenteser. Til sortering og match med andre datasæt, kan man sætte originaltitlen "frem" med:

^([^[\r\n\t]*?) \[(.*?)\]\t — erstat med \2 [\1]\t

Forklaring: find alle første-datafelter, der ikke indeholder et [, TAB- , linieskift-tegn, efterfulgt af en tekststreng indeholdt i [].


#1: abcd
#2: efgh
#3: ijkl

\n#: |\n#: |\n#3: — erstat med TAB


Find alle linier gentaget mindst 5-10 gange i en -dublet-optalt fil:

^(10)|^(9)|^(8)|^(7)|^(6)|^(5)\t

kan f.eks. erstattes med:

\r\n-\1\2\3\4\5\6\t

Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-ShareAlike 3.0 License