2015-05-17 4 views
6

Ich weiß, wie man Wort durch Regex ersetzt, aber ich habe keine Idee, wie man die ganze Linie entfernt/ersetzt, wenn das Wort darin existiert.Wie entferne ich die ganze Zeile, wenn ein Wort darin existiert?

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

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

+1

Ist textBox1 ein MultiLine-Textfeld? Möchten Sie in diesem Fall nur die Zeile entfernen, die das "Wort" enthält, oder möchten Sie alles löschen? – Steve

+0

@Steve ja, es ist MultiLine, und ich möchte nur die Zeile mit passendem Wort entfernen. –

Antwort

6

Sie Linien bedeuten Unter der Annahme, wie ich sie verstanden habe:

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

dies der oben Fall, die Zeile, die "massa, malesuada ..." beginnt, wurde entfernt, da sie "nisl" enthält.

Obligatorische LINQ-Methode (wiederverwenden text Variable oben):

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

Und Sie tun nicht haben Regex zu verwenden, aber regex tut \b haben die Worte eine einfache Sache macht die Suche. IndexOf würde auch funktionieren, aber Sie müssen sich möglicherweise sorgen, "over" in "stackoverflow" (zum Beispiel) zu finden.

0

Wenn Textbox Ihr Wort enthält, ersetzen ganze Textzeile mit leeren String:

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

Denken Sie daran, dass der IndexOf einen int zurückgibt. – ffffff01

+0

@ f01, bearbeitet, um gegen int zu prüfen, sollte richtig sein? – JimboSlice

+0

@JimboSlice sieht so aus, als würde es alle leeren Strings ersetzen. –

Verwandte Themen