2015-05-17 12 views
6

So come sostituire word con Regex, ma non ho idea di come rimuovere/sostituire l'intera riga se la parola esiste al suo interno.Come rimuovere l'intera riga se esiste una parola?

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

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

+1

TextBox1 è una casella di testo MultiLine? In tal caso, vuoi rimuovere solo la riga che contiene la "parola" o vuoi cancellare tutto? – Steve

+0

@Steve sì, è MultiLine e voglio rimuovere solo la riga con la parola abbinata. –

risposta

6

Supponendo che vuoi dire le linee come ho capito loro:

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

Questo quanto sopra caso, la riga che inizia "massa, malesuada ..." è stata rimossa poiché contiene "nisl".

obbligatorio metodo LINQ (ri-utilizzando text variabili sopra):

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

e non si hanno di utilizzare Regex, ma regex ha \b che fa trovare parole una cosa facile. IndexOf potrebbe funzionare, ma potrebbe essere necessario preoccuparsi di trovare "oltre" all'interno di "stackoverflow" (ad esempio).

0

Se testo contiene la parola, sostituire tutta la riga di testo con la stringa vuota:

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

Ricordare che IndexOf restituisce un int .. – ffffff01

+0

@ f01, modificato per verificare contro int, dovrebbe avere ragione? – JimboSlice

+0

@JimboSlice sembra sostituire tutte le stringhe a vuoto. –

Problemi correlati