2016-05-18 6 views
1

Ich habe diesen regulären Ausdruck erstellt, um offensichtlich falsche E-Mail-Adressen auszusortieren. Für meinen großen Datensatz funktioniert es in 98% der Fälle.Python Regex für E-Mail-Adressen, müssen Punkt streichen Strich

pattern = re.compile('^([a-zA-Z0-9._-]+)([a-zA-Z0-9]@[a-zA-Z0-9])([a-zA-Z0-9.-]+)([a-zA-Z0-9]\.[a-zA-Z]{2,3})$') 

Der Teil, wo das Problem ist hier:

([a-zA-Z0-9.-]+) 

Es ist in Ordnung, wenn eine E-Mail-Adresse einen Strich in der Domäne hat, oder eine Periode, aber ich mag nicht, diese beiden Symbole erlaubt nacheinander wie .- or -.

zum Beispiel zu werden, diese sind in Ordnung (und sollte die Regex):

[email protected] 
[email protected] 

Aber das ist nicht (und sollte keine Übereinstimmung ergeben):

[email protected] 

ich ausführlich gelesen und versucht, alle Arten von Optionen um eine andere Gruppe in der Regex wie ([\.]|[\-])? ohne Erfolg zu schaffen. Kann jemand helfen?

+0

Negativen Vorgriff Behauptung verwenden .... '^ (?!. * \ .-. * $ |. * - \ .. * $) ([a-zA-Z0-9 ._-] +) ([a-zA-Z0-9] @ [a-zA-Z0-9]) ([a- zA-Z0-9 .-] +) ([a-zA-Z0-9] \. [a-zA-Z] {2,3}) $ ', https://regex101.com/r/qH7eT1/ 1 –

+0

was ist mit '..' oder' --' –

+0

Wenn nicht dann '^ (?!. * [.-] {2,}. * $) ([A-zA-Z0-9 ._-] +) ([a-zA-Z0-9] @ [a-zA-Z0-9]) ([a-zA-Z0-9 .-] +) ([a-zA-Z0-9]). [a-zA-Z] {2,3}) $ –

Antwort

2

können Sie negative look ahead assertion hier verwenden

^(?!.*\.-.*$|.*-\..*$)([a-zA-Z0-9._-]+)([a-zA-Z0-9]@[a-zA-Z0-9])([a-zA-Z0-9.-]+)([a-zA-Z0-9]\.[a-zA-Z]{2,3})$ 

Regex explanation here

Regular expression visualization


Speziellere wird man sein

^(?![[email protected]]*\.-[[email protected]]*$|[[email protected]]*-\.[[email protected]]*$)([a-zA-Z0-9._-]+)([a-zA-Z0-9]@[a-zA-Z0-9])([a-zA-Z0-9.-]+)([a-zA-Z0-9]\.[a-zA-Z]{2,3})$ 

oder bei .., --, ..., etc. sind nicht erlaubt, dann können Sie

^(?![[email protected]]*[.-]{2,}[[email protected]]*$)([a-zA-Z0-9._-]+)([a-zA-Z0-9]@[a-zA-Z0-9])([a-zA-Z0-9.-]+)([a-zA-Z0-9]\.[a-zA-Z]{2,3})$ 
+0

Wenn ich dieses letzte in regex101 einfügen, erhalte ich den Fehler "Textbereich außer Betrieb". –

+0

Ich denke, ich habe es behoben, indem ich ein paar Striche entkam. dh '^ (?! [a-zA-Z0-9 ._ \ - @] * [.-] {2,} [a-zA-Z0-9 ._ \ - @] * $) ([a- zA-Z0-9 ._-] +) ([a-zA-Z0-9] @ [a-zA-Z0-9]) ([a-zA-Z0-9 .-] +) ([a- zA-Z0-9] \. [a-zA-Z] {2,3} $ –

+0

@ChrisNielsen: behoben, sonst musst du es am Ende verschieben –