C# 字符串:替换包含单词的行

C# 字符串:替换包含单词的行,c#,C#,我有一个从多行文本框复制的字符串。我正在寻找一种方法来替换包含特定短语的整行内容。 例如,字符串如下所示: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse egestas. 因此,我想找到一种方法,将包含短语elit的整行替换为新的行enim vehicula pelletsque.,因此资源将是: Lorem ipsum dolor sit amet, enim vehicula pellente

我有一个从多行文本框复制的字符串。我正在寻找一种方法来替换包含特定短语的整行内容。 例如,字符串如下所示:

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 
Suspendisse egestas.
因此,我想找到一种方法,将包含短语
elit
的整行替换为新的行
enim vehicula pelletsque.
,因此资源将是:

Lorem ipsum dolor sit amet, 
enim vehicula pellentesque. 
Suspendisse egestas.
有没有快速的方法


谢谢

如果要替换包含该文本的所有行,可以执行以下操作:

textBox.Lines = textBox.Lines
                       .Select(line => line.Contains("elit") 
                               ? "enim vehicula pellentesque." : line)
                       .ToArray();
如果您处理的只是表示行的字符串,则可以按照以下行进行操作:

string text = ...

var lines = from line in text.Split
                 (new[] { Environment.NewLine }, StringSplitOptions.None)
            select line.Contains("elit") ? "enim vehicula pellentesque." : line;

string replacedText = string.Join(Environment.NewLine, lines.ToArray());
编辑: 正如JG在一篇评论中指出的那样,如果您正在寻找特定的单词
elit
,这将不起作用。在本例中,您需要一个不同于简单的
字符串的谓词。Contains
。例如,您可以将该行拆分为所有空白字符,然后检查其中是否有一个是列入黑名单的单词:

line.Split().Contains("elit") // pseudo-overload of String.Split
根据您对“单词”的定义,您可能需要一个更高级的过滤器(如Domenic回答中的正则表达式)

var regex = new Regex(@"^.*\Welit\W.*$", RegexOptions.Multiline);
string result = regex.Replace(original, "enim vehicula pellentesque.");
RegexOptions。多行
是关键;它表示应用
^
,(=“开始”)和
$
(=“结束”)来表示行的开始和结束,而不是字符串的开始和结束


\W
s在
elit
的两侧查找非单词字符,因此,例如
fooleit
将不匹配,但
foolet
将匹配。

你所说的“有没有快速方法”是什么意思?请看,有点过时,但仍然非常相关的网站。花时间在那里,你会成为更好的程序员。不仅仅是在C#…@mitch wheat:与慢方式相反,也许lol:)它已经在那里了#哇,我在写通常的foreach。。我见过LINQ的一个很好的用法,尽管这也会错误地替换包含
elite
的行,例如。@JG:非常正确。但是您是否注意到OP想要删除包含“elit”的行而不是“elit”?@yetanothercoder:是的,但这仍然是单词
elit
。检测它的一个简单方法是使用正则词边界(例如,
@“\belit\b”
)。除了这个问题,如果OP有效地处理拉丁语短语,可能不会经常出现这个问题,这是一个很好的答案,也是LINQ imho的一个很好的用例。@JG:感谢
elite
的评论;我试图通过编辑来解决这个问题。不确定这是否是OP真正想要的。您可以使用
\b
而不是
\W
private void button1_Click(object sender, EventArgs e)
    {          
        foreach (var line in textBox1.Lines)
        {
            if (line.Contains("hello"))
            {
               textBox1.Text= textBox1.Text.Replace(line, "This is new line");
            }
        }
    }