2013-06-29 127 views
8

我以前從未使用過正則表達式。我是亞伯在論壇上看到類似的問題,但不完全是我在找什麼獲取大括號之間的值c#

我有一個像下面的字符串。需要花括號之間得到的值

例:「{} name}{[email protected]

,我需要得到以下分裂字符串。

名和[email protected]

我嘗試以下,這讓我回到相同的字符串。

string s = "{name}{[email protected]}"; 
string pattern = "({})"; 
string[] result = Regex.Split(s, pattern); 
+0

這是創建正則表達式模式/學習正則表達式HTTP相當的好工具:// gskinner.com/RegExr/ –

回答

16

是使用正則表達式必須的?在這個特殊的例子中,我會寫:

s.Split(new char[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries) 
+0

@FabianBigler我的印象是,正則表達式可以輕鬆實現這一點,所以我在標題中包含正則表達式:)。我現在已經改變了標題;) – Kurubaran

+0

建議的解決方案是否也採用正確的字符串,例如'string s =「}name{[email protected]」;'? – Josep

+0

我投得太快......這個解決方案沒有提供答案。考慮輸入字符串:{name}blabla{[email protected]},你也將在數組中的「blabla」... – Jurion

0

在這裏你去

string s = "{name}{[email protected]}"; 
s = s.Substring(1, s.Length - 2);// remove first and last characters 
string pattern = "}{";// split pattern "}{" 
string[] result = Regex.Split(s, pattern); 

string s = "{name}{[email protected]}"; 
s = s.TrimStart('{'); 
s = s.TrimEnd('}'); 
string pattern = "}{"; 
string[] result = Regex.Split(s, pattern); 
+0

它的工作原理,但有沒有什麼辦法可以得到這個結果只使用正則表達式模式,而不使用Substring? – Kurubaran

+0

更新的答案方法2沒有子串 –

+0

即時通訊想知道是否有任何是隻使用正則表達式獲取rsult而不做任何其他字符串操作? – Kurubaran

23

使用Regex,而不是SplitMatches輕鬆地做到這一點:

string input = "{name}{[email protected]}"; 
var regex = new Regex("{.*?}"); 
var matches = regex.Matches(input); //your matches: name, [email protected] 
foreach (var match in matches) // e.g. you can loop through your matches like this 
{ 
    //yourmatch 
} 
+0

向上投票回答:) – Kurubaran

+0

@Coder好的乾杯! –