2015-05-17 13 views
6

Wiem, jak zastąpić słowo z Regex, ale nie mam pojęcia, jak usunąć/zastąpić całą linię, jeśli słowo istnieje w nim.Jak usunąć całą linię, jeśli istnieje w niej słowo?

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

textBox1.Text = textBox1.Text.IndexOf ("słowo")> -1? "": textBox1.Text – ffffff01

+1

Czy textBox1 to pole tekstowe MultiLine? W takim przypadku, czy chcesz usunąć tylko wiersz zawierający "słowo" lub czy chcesz usunąć wszystko? – Steve

+0

@Steve Tak, to jest MultiLine, i chcę usunąć tylko wiersz z dopasowanym słowem. –

Odpowiedz

6

Zakładając znaczy linie jak mam rozumieć nich

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

Ten wyżej przypadku, początek linii "massa, malesuada ..." został usunięty, ponieważ zawiera "nisl".

obowiązkowe metoda LINQ (ponowne wykorzystanie text zmienną powyżej):

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

i nie mieć aby użyć wyrażenia regularnego, ale regex ma \b który sprawia, że ​​znalezienie słowa rzeczą łatwą. IndexOf też by działało, ale być może będziesz musiał się martwić o znalezienie "nad" w "stackoverflow" (na przykład).

0

Jeśli pole tekstowe zawiera słowo, należy wymienić całą linię tekstu z pustym ciągiem:

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

Pamiętaj, że IndexOf zwraca int .. – ffffff01

+0

@ f01, edytowane w celu sprawdzenia int, powinno być prawo? – JimboSlice

+0

@JimboSlice wygląda na to, że zamienia wszystkie ciągi na puste. –

Powiązane problemy