2015-05-17 55 views
6

我知道如何用Regex替換單詞,但我不知道如何刪除/替換整個行,如果該單詞存在它。如何刪除整行,如果一個單詞存在它?

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

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

+1

textBox1是一個MultiLine文本框?在這種情況下,你想刪除包含「單詞」的行還是要清除所有內容? – Steve

+0

@Steve是的,它是MultiLine,我想刪除匹配單詞的行。 –

回答

6

假設你的意思行,因爲我已經明白他們:

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

這上面情況下,由於包含「nisl」,因此開始「massa,malesuada ...」的行已被刪除。

強制性LINQ方法(以上text變量重新使用):

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

,你不使用正則表達式,但正則表達式確實有\b這使得尋找一件容易的事情。 IndexOf也可以工作,但您可能不必擔心在「stackoverflow」(例如)中找到「over」。

0

如果文本包含你的話,請用空字符串文字的整條生產線:

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

請記住,IndexOf返回一個int .. – ffffff01

+0

@ f01,編輯檢查對int,應該是正確的? – JimboSlice

+0

@JimboSlice看起來像將所有字符串替換爲空。 –

相關問題