2016-05-18 4 views
1

私は間違った電子メールアドレスを除外するためにこの正規表現を作成しました。大規模なデータセットの場合、98%のケースで動作します。電子メールアドレス用のPython正規表現は、ドットダッシュを除外する必要があります

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})$') 

問題がある部分はここにある:

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

電子メールアドレス、ドメイン内のダッシュ、または期間を持っている場合、それは大丈夫ですが、私は、これら2つのシンボルを望んでいません連続例えば.- or -.

として許容される、これらは大丈夫です(および正規表現と一致する必要があります):

[email protected] 
[email protected] 

しかし、これではありません(と一致をもたらすべきではありません):

[email protected] 

私は広範囲に読んで無駄に([\.]|[\-])?のような正規表現で別のグループを作成する周りのオプションのすべての種類を試してみました。助けてもらえますか?

+0

負の先読みアサーションを使用することができます許可されていません.... '^(?!。* \ .-。* $ ([a-zA-Z0-9] @ [a-zA-Z0-9])([a-zA-Z0-9] zA-Z0-9.-] +)([a-zA-Z0-9] \。[a-zA-Z](2,3))$ '、https://regex101.com/r/qH7eT1/ 1 –

+0

what about '..'または' --' –

+0

もし '^(?!。* [.-] {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})$ ' –

答えて

2

あなたはより具体的な一つになり、ここでnegative look ahead assertion

^(?!.*\.-.*$|.*-\..*$)([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


使用することができます

^(?![[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})$ 

など

やケース..で、--...は、その後、あなたは

^(?![[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

この最後のものをregex101に貼り付けると、 "Text range out of order"というエラーが出ます。 –

+0

私はダッシュのカップルをエスケープすることでそれを修正したと思います。 [a-zA-Z0-9 ._ \ - @] * [[ - ] {2、[a-zA-Z0-9。\\ @] * $)([a- ([a-zA-Z0-9] - [[a-zA-Z0-9])[(a-zA-Z0-9.-] +) zA-Z0-9] \。[a-zA-Z] {2,3})$ ' –

+0

@ChrisNielsen:固定します。そうでなければ、最後まで移動する必要があります –

関連する問題