2014-05-23 2 views
0

예를 들어 @ 대신 [at]을 사용하는 것처럼 이메일 주소와 숨겨진 유사 이메일 주소가 포함 된 행이 있습니다. 전자 메일 주소가 아닌 모든 항목에서이 목록을 정리하고 싶습니다.Regex로 이메일 주소가 아닌 모든 것을 제거합니다.

TLD를이 .com, .us.me

샘플 입력

[email protected] 
johndoe @example.us 
contant johndoe @ example . me 
my email is [email protected] 
[email protected] is my email 
this johndoe @ example.com is my mail 
johndoe[at]example.com 
my email is johndoe [at] example.com 
johndoe[at-sign]example.com 
johndoe at example.com 
johndoe[at-sign]example[dot]com is my mail 
Lorem ipsum dolor sit amet, consectetur adipisicing elit, johndoe[at-sign]example[dot]us 
johndoe[at-sign]example[dot]me labore et dolore magna aliqua 
Sed do eiusmod tempor incididunt johndoe at example dot com 
Duis aute irure dolor in reprehenderit in voluptate JOHNDOE at EXAMPLE dot US aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur 
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum johndoe at example dot me 

내가 메모장 ++ 검색을 사용하고 교체하고 내 시도는이 [\w]+(|\s)(@|at|\[at\]|\[at-sign\])(|\s)[\w]+(|\s)(\.|dot)(|\s)(com|us|me)이며 모든 것을하지만 라인 (11)에 작동하는 것입니다, 12, 13 및 15입니다.

이 글은 독자적으로 작성했으며, 올바른 방법입니까?

원하는 출력 :

[email protected] 
[email protected] 
johndoe @ example . me 
[email protected] 
[email protected] 
[email protected] 
johndoe[at]example.com 
johndoe [at] example.com 
johndoe[at-sign]example.com 
johndoe [at-sign] example.com 
johndoe[at-sign]example[dot]com 
johndoe[at-sign]example[dot]us 
johndoe[at-sign]example[dot]me 
johndoe at example dot com 
JOHNDOE at EXAMPLE dot US 
johndoe at exampledotme 

은 내가 e-mail validation can be hard 읽었습니다 때문에이 100 % 방탄 것으로 기대하지 않습니다.

+0

줄마다 하나의 이메일이 항상 존재합니까? – sp00m

+0

예, 가능합니다. –

+0

내 이메일은'.net'로 끝나며, FYI는 완벽하게 유효합니다. – h2ooooooo

답변

1

당신은 당신의 정규식 조금 단순화하고, 당신이 사용하고있는 하나 잘못 것은 당신이 dot 주위에 사각 괄호 일치하지 않는 것입니다 수 있습니다

\w+\s?(?:@|at|\[at(?:-sign)?\])\s?\w+\s?(?:\.|\[dot\]|dot)\s?(?:com|us|me) 
               ^^^^^^^ 

regex101 demo

비록 당신의 경우

^(?:.*?(\w+ ?(?:@|at|\[at(?:-sign)?\]) ?\w+ ?(?:\.|\[dot\]|dot) ?(?:com|us|me)).*|.*)$ 

을 그리고 $1로 교체 : 다른 모든 것들을 제거 할, 당신은이를 사용할 수 있습니다.

regex101 demo

+0

놀라운 Jerry. 두 번째 "다른 모든 것들을 제거하십시오"해결책은 regex101에서 훌륭하게 작동하는 것처럼 보입니다. 그러나 메모장 ++에서 15 번째 줄 (예 : 점선 US에서 점을 포함하는 줄)이 완전히 사라지는 경우 대/소문자 구분 때문에? –

+0

@LiuKang 예, 대소 문자를 구분하지 않는 문자와 일치합니다. 블록 문자로 된 'US'가 있습니다. 동일한 이유로 regex101에서 'i'플래그도 사용했음을 주목하십시오. – Jerry

관련 문제