2014-10-10 27 views
6

Soru: ',' üzerinde bir dizeyi bölmek için '/,' değil bir ifadeyi nasıl yazarım? Daha sonra '/,''u ', ' ile değiştirmek istiyorum.“,” yerine bölme, ancak “/” değil

Detaylar ...

Sınırlayıcı: ','

Atla Char: '/'

Örnek girişi: "Mister,Bill,is,made,of/,clay"

ben bir diziye bu girdiyi bölmek istediğiniz : {"Mister", "Bill", "is", "made", "of, clay"}

Bunu bir char prev, cur; ve bazı dizinleyicilerle nasıl yapılacağını biliyorum, ancak bu beta görünüyor.

Java Regex'in bölünmüş bir işlevi vardır, ancak bu davranışı C# içinde nasıl çoğaltacağımı bilmiyorum.

Not: Bu yinelenen bir soru değil, aynı soru ama farklı bir dil için. Eğer negative lookbehind bir aradığınız {"Mister", "Bill", "is", "made", "of clay"}

+0

sınırlayıcı gibi işleminizi devam kömür küresel sınıfta düzenlenen consts olan atlayabilirsiniz. Değişebilmelilar. – visc

+0

Nihayet, ne yapmak istersin? – Robin

+2

Kendi CSV okuma/yazarımı oluşturma sürecindeyim. CsvHelper'a bir göz attık ama ihtiyaç duyulandan daha fazla işlevsellik sağladı. Bir CSV dosyasını bir Liste yapısına yüklemeye çalışıyorum. CSV'den diziye gitmek için basit bir yol arıyorum. – visc

cevap

8

inanıyorum:

var regex = new Regex("(?<!/),"); 
var result = regex.Split(str); 

s.Replace("/,", "//").Split(',').Select(x => x.Replace("//", ",")); 
0

Sadece senin dizesinden virgül kaldırmak için Değiştir kullanmak Bu, tüm virgüllerde str'u bölünmeyecek t bir eğik çizgiden önce. Eğer dize '/,' tutmak istiyorsanız, bu sizin için çalışacaktır. Eğer dize bölmek istediğini söyledi yana

ve üstü'/,'', ' ile, size sonucun üzerine yineleme ve şöyle dizeleri yerini alabilir sonra yukarıdaki ilk yapmak isteyeceğiniz değiştirin:

var replacedResult = result.Select(s => s.Replace("/,", ", "); 
+5

iyimser görünüyor. Kimin verileri zaten "//" içermiyor? – ths

3
string s = "Mister,Bill,is,made,of/,clay"; 
var arr = s.Replace("/,"," ").Split(','); 

sonucu:

+0

Sizinki, talep edileni yapan tek şeydir, ki bu herkesin yaptıklarından çok daha kolay. (çünkü istediği gibi, /, bir örnekle kanıtladığı gibi bir boşluk ile değiştirilir) –

+6

Ama _ "Daha sonra '/' ile değiştirmek istiyorum ','" _. Sanki son dizinin son maddesi şöyle olmalı: "kilden". Yaklaşımınız ile bu virgülü eklemek zorunda olduğunuzda bilgiler kaybolur. –

+1

Soru, örnek çıktısının artık cevap verdiğinden farklı olması için düzenlendi. –

2

kullanma Regex:

var result = Regex.Split("Mister,Bill,is,made,of/,clay", "(?<=[^/]),"); 
+2

Olumsuz bir karakteri olan olumlu bir bakış açısı? Kıvrılmış görünüyor. –

+0

@LukeWillis: Gerçekten de, Regex.Split (", x", "(? <= [^ /]),") 'Döndürür, {", x "}', ama beklerdim, {"", " x "} '. – Gabe

+0

@Gabe bunun nedeni, her virgülün bir eğik çizgi olmayan bir karakterden önce gelmesini gerektirmesidir. –

0

Sen C# bunu kullanabilirsiniz

string regex = @"(?:[^\/]),"; 
var match = Regex.Split("Mister,Bill,is,made,of/,clay", regex, RegexOptions.IgnoreCase); 

Bundan sonra /, yerine ve

+1

-1, Kodunuz "Miste", "Bil", "i", "delil", "/, kili" , açıkça doğru değil. – Gabe

+0

Çünkü '(?: )' bir yakalama grubudur. Yani, virgülden önceki eğik olmayan karakterler "Split" tarafından tüketiliyor. –

İlgili konular