2015-07-21 43 views
3

下面的正則表達式一開始通配符是電子郵件的樣本,我從數據庫中使用:使用轉義字符在C#

2.2|[[email protected]] 

每一行都是不同的,它可能是也可能不是一個電子郵件,但它會一直。我正在嘗試使用正則表達式來獲取括號內的信息。下面是我一直在嘗試使用:

^\[\]$ 

不幸的是,每次我嘗試使用它時,表達式都不匹配。我認爲問題是使用轉義字符,但我不確定。如果這不是我如何使用轉義字符,或者如果我完全錯了,請讓我知道實際的正則表達式應該是什麼。

+2

該表達式與該行的開頭緊跟着一個'[',後面緊跟着一個']'緊跟着行尾。這聽起來像它會匹配你的字符串? – Blorgbeard

回答

2

關閉你的是^.*\[(.*)\]$

  • ^開始行的
  • .*什麼
  • \[支架,指示電子郵件
  • (.*)任何東西(電子郵件)的開始,作爲捕獲組
  • \]正方形bracked,指示所述電子郵件的端部的線的
  • $

請注意,您的正則表達式缺少.*部件以匹配關鍵字符[和]之間的內容。

1

您的正則表達式 - ^\[\]$ - 與僅包含[]的單個字符串/行匹配,並且您需要獲取位於較大字符串內部的方括號之間的子字符串。

您可以使用

var rx = new Regex(@"(?<=\[)[^]]+"); 
Console.WriteLine(rx.Match(s).Value); 

regex demo

隨着(?<=\[)我們找到了位置[後,然後我們每一個字符不][^]]+匹配。

另外,非正則表達式的方法:

var s = "2.2|[[email protected]]"; 
var ss = s.Split('|'); 
if (ss.GetLength(0) > 1) 
{ 
    var last = ss[ss.GetLength(0)-1]; 
    if (last.Contains("[") && last.Contains("@")) // We assume there is an email 
     Console.WriteLine(last.Trim(new[] {'[', ']'})); 
} 

IDEONE demo of both approaches