Hilfe mit RegEx

traced

Registered User
Hi Jungs,
kann mir mal einer ´nen RegEx Denkanstoss geben?
Folgende zwei Strings sind gegeben:

a) ...amavis[27707]: (27707-17) Passed CLEAN, [87.238.81.xx] [87.238.81.xx] <201008020924566f36bc3080f14b7f8d...
b) ...amavis[4030]: (04030-01) Blocked BANNED (multipart/mixed | image/jpeg,.image,.jpg,picture.jpg), [178.63.222.xxx]

Jetzt bräuchte ich mit einem RegEx nur folgendes: "Passed CLEAN" oder "Blocked BANNED".

In Python bekomme ich ja jeweils pro String so das gewünschte:
a) r'\) ([^>].+?), \['
b) r'\) ([^>].+?) \('

Nur bin ich irgendwie zu doof, dass in einem String zusammen zu fassen... :rolleyes:

Danke & viele Grüße
Basti

PS: Wenn einer nen guten Link hat, wo ich mich einarbeiten könnte wäre das natürlich auch super!
 
Jetzt bräuchte ich mit einem RegEx nur folgendes: "Passed CLEAN" oder "Blocked BANNED".
Du möchtest also jeden String, der "Passed CLEAN" oder "Blocked BANNED" enthält filtern? Soll das für Logcheck sein?

Ich würde den RegEx so schreiben:
Code:
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ amavis\[[0-9]*\]: \([0-9]*\-[0-9]{2}\) (Passed CLEAN|Blocked BANNED) (.*)

Etwas genauer würde es natürlich auch gehen. Das sollte aber matchen.
 
Last edited by a moderator:
Wenn dich sowieso nur diese beiden Strings (oder primär wahrscheinlich "Passed" und "Blocked") interessieren, warum matchst du dann nicht auf diese?
Code:
^amavis\[[0-9]+\]: \(.+\) (Passed|Blocked) ([A-Z]+).*
 
Hi schonmal vielen Dank!

Ist für nen Logparser, der bestimmte Sachen in ne Datenbank schreibt. Das Problem ist, dass es hier mehrere Möglichkeiten gibt, also nicht nur "blocked spam" und "passed clean", sondern auch "passed spammy" und "blocked infected" etc, deswegen würde ich das gerne anhand der "Umrandung" rausfiltern.

Folgendes Pattern brachte mich schonmal weiter:
Code:
r'\) ([^>].+?)(, \[| \()'

Ausgabe:
Code:
('Passed CLEAN', ', [')
('Blocked BANNED', ' (')

Damit kann ich schonmal arbeiten, mit z.B.: string = string[0]
Aber das muss doch auch schöner gehen :-)

Grüsse
 
Dann ersetze doch das Wort nach Blocked oder Passed durch ein (.*) dann sollte er alle Kombinationen rausfiltern können.
 
Jetzt bin ich verwirrt :D

Code:
        pat5 = r'amavis\[[0-9]+\]: \(.+\) (Passed|Blocked) ([A-Z]+).*'
        amaviscode = re.findall(pat5, amavis)

gibt mir python:

Code:
[('Passed', 'CLEAN')]

Das muss ich jetzt erstmal wieder irgendwie in einen String bringen *grübel*
 
Ah, bisserl umständlich, aber so gehts:

Code:
amaviscode = (amaviscode[0])[0] + ' ' + (amaviscode[0])[1]

Danke!
 
Back
Top