2013-06-29 15 views
8

Daha önce hiç kullanmamıştım. Ben forumda benzer soruları görmek için abel oldu ama tam olarak ne gibi bir şey arıyorumKıvırcık parantezler arasındaki değerleri alın C#

Ben aşağıdaki gibi bir dize var.

Ex küme parantezleri arasındaki değerleri almak gerekir: "{name}{[email protected]}"

Ve şu parçalı dizeleri almak gerekiyor.

isim ve [email protected]

Aşağıdaki çalıştı ve aynı dizeyi beni geri veriyor. Burada

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

Bu/regex desenleri oluşturmak regex http öğrenme için oldukça iyi bir araçtır: // gskinner.com/RegExr/ –

cevap

16

gitmek? Bu özel örnekte ben yazardım:

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

@FabianBigler Regex'in bunu kolayca başarabildiği izlenimindeydim, bu yüzden Regex'i başlığa dahil ettim :). Başlığı şimdi değiştirdim;) – Kurubaran

+0

Önerilen çözüm de dize s = "}name{[email protected]"; – Josep

+0

Çok hızlı oy kullandım… Bu çözüm bir cevap vermiyor. Girdi dizgisini göz önünde bulundurun: {name}blabla{[email protected]}, dizide de “blabla” yı alacaksın… – Jurion

0

Eğer bir zorunluluk regex kullanarak mı

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); 

veya

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

Çalışıyor, ancak bu sonucu yalnızca Substring kullanmadan Regex desenini kullanarak almanın bir yolu var mı? – Kurubaran

+0

güncellenmiş yanıtlama yöntemi 2 alt yazı olmadan –

+0

herhangi bir dize manipülasyon yapmadan sadece regex deseni ile rsult almak için var mıydı merak ediyorum? – Kurubaran

23

kullanın Regex yerine Split ait Matches kolayca Bunu gerçekleştirmek için:

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

Yukarı Bu cevabı yazdı :) – Kurubaran

+0

@Coder Ok cheers! –