Hvordan regex hjalp meg til å finne e-postadressene til alle stipendiater og postdoktorer ved UiB

Jeg stiller til valg for midlertidig vitenskapelig ansatte (aka gruppe B) i Universitetsstyret ved UiB i år. Når man stiller til valg skal man gjerne drive litt valgkamp. Samtidig som man ikke har lyst til å være til bry, bør man i hvert fall sørge for at folk vet at det er valg, vet hvem de kan stemme på, og hvorfor de skal stemme på meg. Lettere sagt enn gjort.

E-post er og blir hovedkommunikasjonsformen ved universitetet. Man kan dog ikke sende e-postlister uten videre ved andre fakultet, disse er heller ikke gjort offentlige. Det er én god grunn til det: SPAM.

Så, hva gjør man om man ønsker å sende en e-post til flest mulig innenfor gruppe B på universitetet? I utgangspunktet – så vidt jeg vet – er man nødt til å gå igjennom alle ansattlistene på grunnenhetene, finne stipendiater og postdoktorer[1] og kopiere tilhørende e-postadresser inn i en liste. Man trenger ikke holde på lenge før man innser at det vil ta veldig lang tid.

Jeg har lenge tenkt at jeg bør lære meg regex[2], blandt annet fordi jeg skal jobbe mye med tekst-analyse i forskningsprosjektet mitt. Enkelt sagt er regex en måte å søke etter utrykk heller enn ord i en tekst. Det er en litt bratt læringskurve til å begynne med, men det er «egentlig veldig enkelt». Se denne videoen for en grei og lett innføring (takk til @thunki for tips).

Dersom man kopierer all tekst på en ansattside vil det se omtrent slik ut:

Allerede her kunne man satt seg ned å manuelt kopiert ut alle de e-post adressene som var relevante, men det ville fremdeles ta mye tid. Jeg tok utgangspunkt i organisasjonsoversikten til i UiB og åpnet alle grunnenheter i nye faner i nettleseren. Deretter gikk jeg i gjennom alle ansattekatalogene, kopierte alt på siden og limte inn teksten i en dokument i Sublime Text 2. Dette tok ikke så lenge som jeg hadde fryktet, og det var dessuten interessant å få et grovt overblikk over hele organisasjonen og alle (ja, det er mange) de ansatte.

Etter jeg var ferdig med å få inn all teksten i et dokument, begynte jeg å prøve meg frem for å finne ut hvilken regex-streng som klarte å sile ut e-poster kun til stipendiater og postdoktorer. Etter en del prøving og feiling kom jeg frem til følgende:

^(stipendiat|postdoktor)(\n|\n.+\n)(.+?@.+)$

Ett treff vil da se sånn ut:

Stipendiat
+47 55583163
Knut.Melvar@ahkr.uib.no

Det er helt sikkert bedre og mer optimaliserte måter å få denne jobben gjort på, men jeg var fornøyd som nybegynner i regex. Jeg kunne helt sikkert også ha skriptet en web-crawler som gikk gjennom alle disse sidene og hentet ut treffene automatisk, men da nærmer vi oss farlig en SPAM-robot.

I Sublime Text er det mulig å søke med regex-strenger, og enda bedre, markere og kopiere alle treffene. Gjør man det får man en liste med alle stipendiater og postdoktorer med telefonnummer og, ikke minst, e-post adresser. Jeg endte opp med 960[3] adresser. I denne listen var det bare til å bruke

.+?@.+?

til å fange opp alle e-post adressene.

Så kunne jeg gå i gang med å sende ut e-poster om valget til alle stipendiater og postdoktorer ved UiB. Jeg tok 100 adresser i slengen og satt dem i blindkopi-feltet og sendte e-posten til meg selv. På den måten sprer jeg ikke alle e-post adressene til alle og hindrer potensielle «reply-all» uhell. Litt spent på om e-post serverene synes det er greit at det blir sendt ut e-post til 960 stykker på én dag. Noen sjanser må man ta.


  1. Jeg vet det er flere stillinger som kommer inn under gruppe B, men disse kan man ikke identifisere på nettsidene. Så vidt jeg vet.  ↩

  2. Forkortelse av Regular Expressions. grep er også brukt om det samme  ↩

  3. Wow. Vi er mange.  ↩