2012-03-24 7 views
3

정규식을 작성하고있는 텍스트 문서에서 전자 메일 주소와 일치하는 것을 찾고 있습니다. RegEx to string of

((?:[a-zA-Z]+[\w+\.\-]+[\-a-zA-Z]+))[ ]*((?:@|at))[ ]*(?:[a-zA-Z\.]+) 

내가 전자 메일 주소의 끝은 '에듀'또는 'COM'이 있는지 확인하려면 - 나는 우선이 같은 뭔가 올라와있다. 어떻게해야합니까? 나는 파이썬을 사용하고있다. 내 텍스트 문서에서

일부 샘플 전자 메일 주소

alice @ so.edu 
alice at sm.so.edu 
alice @ sm.com 

편집 -

나는이 정규식에만 변화를 만들고 싶어. My regex는 데이터에 몇 가지 다른 예를 들어 맞습니다.

답변

2
((?:[a-zA-Z]+[\w+\.\-]+[\-a-zA-Z]+))[ ]*((?:@|at))[ ]*(?:[a-zA-Z\.]+)\.(com|edu) 

편집 :는 "점"를 대신 "."그가에서`@ 대신`의 at``공간을 가지고있는 경우

((?:[a-zA-Z]+[\w+\.\-]+[\-a-zA-Z]+))[ ]*((?:@|at))[ ]*(?:[a-zA-Z\.]+) *(\.|dot) *(com|edu) 
+0

왜 '$'는 필요하지 않습니까? 왜냐하면 - (? : [a-zA-Z \.] +) \. 전체 도메인/하위 도메인 문제를 올바르게 파악합니까? 내가 그것을 정확하게 이해했는지 확인하고 싶습니다. – Dexter

+2

@mcenly 흠, 정규식이나 광산에서'$'이 보이지 않습니다. '$ '는 줄 끝의 전자 메일 주소와 만 일치합니다. 그것은 당신이 원하는 것일 수도 아닐 수도 있습니다. 한 줄에 하나의 전자 메일 만있는 샘플 문서에서는 전혀 문제가되지 않지만 전자 메일이 전체에 걸쳐있는 텍스트 문서에서 '$'는 끝에있는 전자 메일 만 발생시킵니다. 일치하는 행 – wrongusername

+0

줄 끝으로 \ n 옳고 끝은 문자열이 아닐까요? 너를 괴롭히지 않아서 미안해. – Dexter

1

우선 모두과 일치하는 방법에 대한 설명은 this answer을 참조하십시오. 유효한 전자 메일 주소는 RFC822에 따릅니다.

개인적으로 정규 표현식을 수정하지 않고 대신 정규 표현식 일치에 email.Utils.parseaddr()를 사용하고 결과 문자열 .endswith("edu") 또는 .endswith("com") 있는지 확인합니다. 예 :

>>> email.Utils.parseaddr("[email protected]")[1].endswith(".com") 
True 
+0

가 작동하지 않을 자신 이메일 주소? – wrongusername

+1

@Kimvais 나는 스팸을 피하기 위해 사람들이 전자 메일 주소를 작성한 복잡한 방법이 존재한다고 판단 할 수는 없습니다. – Dexter

+0

@mcenley - 공정합니다. 그러나'.edu' 또는'.com'으로 __not__로 끝나는 전자 메일 주소가 _huge_입니다. – Kimvais