2013-10-12 36 views
0

我有一個包含用戶名和電子郵件地址列表的文件,我需要兩個表達式。一個獲取電子郵件地址(它們總是以.com或.net或.org結尾),另一個獲取用戶名。在@符號後提取用戶名或電子郵件/域名

我只希望用戶名作爲一個表達式和域名部分作爲另一個,我不想@標誌。

@stackoverflow.com 
@google.com 
@example.com 

我試圖

^@.*?..*?$ 

用戶

@Perl 
@Python 
@PHP 

我試圖

^@.*?$ 

任何建議都不錯。

回答

0

在您的第一個表達式中,如果您在最後一個.*?之前轉義了\.點,它將會匹配您的第二個表達式完全匹配整行。匹配但不包括@你可以做..

對於域使用:

^@(\S+\.[^\s]+)$ 

正則表達式:

^    the beginning of the string 
@    '@' 
(   group and capture to \1: 
\S+   non-whitespace (all but \n, \r, \t, \f, and " ") (1 or more times)  
\.   '.' 
[^\s]+  any character except: whitespace (1 or more times) 
)    end of \1 
$    before an optional \n, and the end of the string 

參見live demo

對於用戶使用:

^@([^\s.]+)$ 

正則表達式:

^    the beginning of the string 
@    '@' 
(   group and capture to \1: 
[^\s.]+  any character except: whitespace or '.' (1 or more times) 
)    end of \1 
$    before an optional \n, and the end of the string 

live demo

0

你可以爲域做這樣的事情:

^@[^.]+\.[^.]+$ 

這將匹配字符串的開始,接着是@,後面跟着一個或多個任意字符以外.,其次是一個.,然後是除.之外的任意字符中的一個或多個,後面跟着字符串的結尾。

但是,這不會捕獲超過兩部分的域(例如@meta.stackoverflow.com)。如果這是重要的,你可能會改爲試試這個:

^@[^.]+(\.[^.]+)+$ 

這將匹配字符串的開始,接着是@,後面跟着一個或超過.以外的任何字符,隨後是由一組的.,隨後是除.以外的任何字符中的一個或多個,其中該組可以重複重複一次或多次,接着是字符串的結尾。

而這對於用戶:

^@[^.]+$ 

這將匹配字符串的開始,接着是@,後面跟着一個或多個.其他任何字符,隨後的年底串。

+0

這是匹配@的下一行嗎? – Joec

0

試試這個

USERS (? ?< = @)\ w +

EMAIL (< = @)\ w +(?:COM |網絡| ORG)

編輯: 嗯,你並沒有規定什麼正則表達式引擎你」重新運行,這是基於pcre的,但任何帶lookbehind的引擎最有可能將具有相同的語法

相關問題