Regular Expressions - multiple occurences

Pagina: 1
Acties:

  • Genius2000
  • Registratie: Februari 2001
  • Laatst online: 05-12-2025
Hi

Hoe kan ik al mijn mail txt bestanden scannen op een bepaalde string die minstens 2x moet voorkomen?

In onderstaand fragment, zou
for <test@planetinternet.be>
minstens 2x moeten voorkomen.

Al de programma's die ik ken zoeken slechts 1 occurence van een bepaalde de string. Kan dit bv via regular expressions met total commander?

Thanks
Genius

___
voorbeeld:
Return-path: <support-renew@gandi.net>
Received: from localhost ([127.0.0.1])
by example.com (example.com [127.0.0.1])
(MDaemon.PRO.v7.0.0j.R)
with MultiPOP id md50000016307.msg
for <test@example.com>; Tue, 23 Mar 2004 08:26:53 +0100
Received: from (vmx.planetinternet.be [195.95.30.168])
by zeus.is.scarlet.be with ESMTP id i2N4ECB03590
for <test@planetinternet.be>;
Tue, 23 Mar 2004 05:14:12 +0100
Received: from cardhu.gandi.net (cardhu.gandi.net [80.67.173.14])
by vmx.planetinternet.be (8.12.10/8.12.6) with ESMTP id i2N4E8Tk019536
for <test@example.com>; Tue, 23 Mar 2004 05:14:12 +0100
Received: from gandi.net (localhost [127.0.0.1])
by cardhu.gandi.net (Postfix) with ESMTP id 3E8C513770B
for <test@example.com>; Tue, 23 Mar 2004 05:14:04 +0100 (CET)
Content-Type: text/plain; charset="iso-8859-1"

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Wat probeer je te bereiken ??? Want ik denk niet dat je total commander echt geschikt voor is, als je dit tenminste vaker wilt doen.

Oftewel wat is de frequentie waarmee je dit wilt doen??? 1x of meerdere keren per maand, indien geval 2 kijk dan eens naar een andere oplossing.

En hoe krijg je het mailtje aangeleverd ( als stream / bestand ) en wil je dit voor of na je mailprogramma gebruiken ???

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Afgezien van de regex niets met programmeren van doen... "programma gezocht dat iets kan" -> Software Algemeen :)

Professionele website nodig?


  • Genius2000
  • Registratie: Februari 2001
  • Laatst online: 05-12-2025
Gomez12 schreef op 08 juli 2004 @ 22:31:
Wat probeer je te bereiken ??? Want ik denk niet dat je total commander echt geschikt voor is, als je dit tenminste vaker wilt doen.

Oftewel wat is de frequentie waarmee je dit wilt doen??? 1x of meerdere keren per maand, indien geval 2 kijk dan eens naar een andere oplossing.

En hoe krijg je het mailtje aangeleverd ( als stream / bestand ) en wil je dit voor of na je mailprogramma gebruiken ???
Voorgeschiedenis:
Ik ontvang bijzonder veel spam en wil graag mijn email adres veranderen. Nu moet ik achterhalen op welke diensten ik me allemaal heb geabonneerd afgelopen 7 jaar.

Omwille van historiciteit is de enigste manier om de msg headers te scannen, waarbij een bepaalde string minstens 2x moet voorkomen en vervolgens moet ik de content manueel overlopen :-(

Formaat:
Alle mails zijn puur text formaat (dus zonder speciale tekens). Moet slechts éénmalig uitgevoerd worden; dus heb ik weinig zin om een programma te schrijven hiervoor.

Kan je mij helpen? Voorbeeld hieronder, waarbij for <test@example.com> 2x voorkomt.

Thanks
Genius

___
voorbeeld:
Return-path: <support-renew@gandi.net>
Received: from localhost ([127.0.0.1])
by example.com (example.com [127.0.0.1])
(MDaemon.PRO.v7.0.0j.R)
with MultiPOP id md50000016307.msg
for <test@example.com>; Tue, 23 Mar 2004 08:26:53 +0100
Received: from (vmx.planetinternet.be [195.95.30.168])
by zeus.is.scarlet.be with ESMTP id i2N4ECB03590
for <test@planetinternet.be>;
Tue, 23 Mar 2004 05:14:12 +0100
Received: from cardhu.gandi.net (cardhu.gandi.net [80.67.173.14])
by vmx.planetinternet.be (8.12.10/8.12.6) with ESMTP id i2N4E8Tk019536
for <test@example.com>; Tue, 23 Mar 2004 05:14:12 +0100
Received: from gandi.net (localhost [127.0.0.1])
by cardhu.gandi.net (Postfix) with ESMTP id 3E8C513770B
for <test@example.com>; Tue, 23 Mar 2004 05:14:04 +0100 (CET)
Content-Type: text/plain; charset="iso-8859-1"

Verwijderd

simpel?

zo:

de string die je wil vinden heet even AA

.*AA.*AA.*

(. = elk willekeurig karakter, * = 0 of meer keer voorkomen van vorige expressie)

dit match met alles waar minstens twee keer AA in voor komt. Beetje basic hoor :p

[ Voor 22% gewijzigd door Verwijderd op 08-07-2004 23:20 ]


Verwijderd

Verwijderd schreef op 08 juli 2004 @ 23:19:
simpel?

zo:

de string die je wil vinden heet even AA

.*AA.*AA.*

(. = elk willekeurig karakter, * = 0 of meer keer voorkomen van vorige expressie)

dit match met alles waar minstens twee keer AA in voor komt. Beetje basic hoor :p
En omdat we het net even wat handiger willen houden doen we het zo:

(AA).*?\\1

Waarom handiger? Omdat dit makkelijker uitbreidbaar is naar 3 of 6 of 25.
En omdat deze regex gewoon naar een patroon kan zoeken, niet alleen naar een vooraf opgegeven string. In dat geval zou je namelijk gewoon simpele string functies moeten gebruiken.

(AA)(?:.*?\\1){2}
(AA)(?:.*?\\1){5}
(AA)(?:.*?\\1){25}

\\1 is hier uiteraard de backreference, en ?: is gebruikt om toch een klein beetje geheugen te besparen.

Maar soms is het verstandiger om naar andere oplossingen dan een enkele regex te zoeken. Je zou ook alleen een simpelere vorm kunnen gebruiken en dan de rest met de programmeertaal doen.

[edit]
Extra noot: je moet er wel voor zorgen dat de dot (.) ook een newline matcht.

[ Voor 15% gewijzigd door Verwijderd op 08-07-2004 23:32 ]

Pagina: 1