2015-05-17 24 views
6

Regex ile sözcüğün nasıl değiştirileceğini biliyorum, ancak içinde varolan satırın tümünü nasıl sileceğimi/değiştirmeyi bilmiyorum.İçinde bir sözcük varsa tüm satır nasıl kaldırılır?

var text = String.Join(Environment.NewLine, new[]{ 
     "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sed congue tortor, ", 
     "ut sollicitudin lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ", 
     "ultrices posuere cubilia Curae; Nam ultricies dolor vel massa scelerisque, et interdum ", 
     "orci finibus. Duis felis nibh, pretium quis placerat at, fringilla eu justo. ", 
     "Pellentesque id nunc ullamcorper, condimentum lacus a, mollis neque. Etiam sapien ", 
     "massa, malesuada in dui in, rutrum aliquet nisl. Sed a egestas odio, in faucibus ", 
     "magna. Morbi sit amet tincidunt diam. Morbi tristique magna diam, nec consectetur ", 
     "mauris vehicula volutpat. Praesent egestas cursus arcu, vel luctus purus interdum eget. ", 
     "Pellentesque nec bibendum orci. Proin eget odio mattis, euismod nulla ac, fermentum ", 
     "ipsum. Aliquam a velit nulla. Suspendisse eget posuere nunc, at imperdiet ligula. ", 
     "Pellentesque vel risus eu augue sagittis faucibus. Sed leo tellus, auctor id eros ut, ", 
     "posuere consequat ligula. " 
    }); 
    var word = "nisl"; 
    var result = Regex.Replace(text, String.Format(@"(^.*?\b{0}\b.*?$)", Regex.Escape(word)), "", RegexOptions.Multiline | RegexOptions.IgnoreCase); 

Bu, yukarıda: Onları anladım gibi çizgiler demek varsayarsak

textBox1.Text = textBox1.Text.IndexOf("word") < 0 ? textBox1.Text : ""; 
+0

textBox1.Text = textBox1.Text.IndexOf ("word")> -1? "": textBox1.Text – ffffff01

+1

textBox1 çok satırlı bir metin mi? Bu durumda, "kelimeyi" içeren satırı kaldırmak veya her şeyi temizlemek istiyor musunuz? – Steve

+0

@Steve evet, bu MultiLine ve ben sadece eşleşen kelimeyle satırı kaldırmak istiyorum. –

cevap

6

: metin kutusu sözünü içeriyorsa

textBox1.Text = Regex.Replace(textBox1.Text, "word", ""); 
0

, boş dize ile metnin bütün çizgi yerine durumda, "massa, malesuada ..." başlayan satır "nisl" içerdiğinden kaldırılmıştır.

Zorunlu LINQ yöntemi (yukarıda text değişken kullanılarak yeniden):

var regex = new Regex(String.Format(@"\b{0}\b", Regex.Escape(word)), RegexOptions.IgnoreCase); 
var result = String.Join(Environment.NewLine, text.Split(new String[]{ Environment.NewLine }, StringSplitOptions.None) 
    /* remove line */ .Where(line => !regex.IsMatch(line)) 
    /* replace line */ //.Select(line => !regex.IsMatch(line) ? line : "" /* replacement*/) 
    .AsEnumerable() 
).Dump("LINQ"); 

Ve Regex kullanmak yok, ama regex kelime kolay bir şey bulmasını sağlar \b var. IndexOf da işe yarayacaktı, ancak "stackoverflow" içinde "over" bulma konusunda endişelenmeniz gerekebilir (örneğin).

+0

Unutmayın, IndexOf bir int döndürür .. – ffffff01

+0

@ f01, int karşı kontrol etmek için düzenlenmiş, doğru olmalı? – JimboSlice

+0

@JimboSlice, tüm dizeleri boş olarak değiştirir gibi görünüyor. –

İlgili konular