如果一行中存在一个单词,如何删除整行

本文关键字:何删除 删除 一行 存在 如果 一个 单词 | 更新日期: 2023-09-27 17:49:26

我知道如何用Regex替换word,但如果其中存在单词,我不知道如何删除/替换整行

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

如果一行中存在一个单词,如何删除整行

假设你指的是我理解的行:

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

在上面的例子中,以" masa, malesuada…"开头的行已经被删除了,因为它包含"nisl"。

强制性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");

和你不使用Regex,但Regex确实有'b,这使得查找一个容易的事情。IndexOf也可以工作,但是您可能不得不担心在"stackoverflow"(例如)中找到"over"。

如果文本框中包含您的单词,则将整行文本替换为空字符串:

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