2015-05-17 13 views
6

Tôi biết cách thay thế từ bằng Regex, nhưng tôi không biết cách xóa/thay thế toàn bộ dòng nếu từ tồn tại trong đó.Làm thế nào để loại bỏ toàn bộ dòng nếu một từ tồn tại trong nó?

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

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

+1

TextBox1 có phải là hộp văn bản MultiLine không? Trong trường hợp đó, bạn có muốn xóa chỉ dòng có chứa từ "" hay bạn muốn xóa mọi thứ? – Steve

+0

@Steve vâng, đó là MultiLine và tôi chỉ muốn xóa dòng có từ phù hợp. –

Trả lời

6

Giả sử bạn có nghĩa là dòng như tôi đã hiểu họ:

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

này trên trường hợp, dòng bắt đầu "massa, malesuada ..." đã bị xóa vì nó chứa "nisl".

phương pháp LINQ bắt buộc (tái sử dụng text biến trên):

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

Và bạn không sử dụng Regex, nhưng regex không có \b mà làm cho việc tìm kiếm lời một điều dễ dàng. IndexOf cũng sẽ hoạt động, nhưng bạn có thể phải lo lắng về việc tìm "over" trong "stackoverflow" (ví dụ).

0

Nếu hộp chứa văn bản của bạn, thay thế toàn bộ dòng văn bản với chuỗi rỗng:

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

Hãy nhớ rằng IndexOf trả về một số .. – ffffff01

+0

@ f01, được chỉnh sửa để kiểm tra với int, phải không? – JimboSlice

+0

@JimboSlice trông giống như nó thay thế tất cả các chuỗi để trống. –

Các vấn đề liên quan