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

时间:2011-02-05 16:30:09

标签: c#

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

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 
Suspendisse egestas.

所以我想找到一个方法来替换包含例如短语elit的整行和新行enim vehicula pellentesque.,以便重新构建:

Lorem ipsum dolor sit amet, 
enim vehicula pellentesque. 
Suspendisse egestas.

有快速的方法吗?

由于

3 个答案:

答案 0 :(得分:8)

如果您要替换包含 text 的所有行,您可以这样做:

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,这将无效。在这种情况下,您需要一个与简单string.Contains不同的谓词。例如,你可以用所有空白字符拆分该行,并检查其中一个是否是列入黑名单的单词:

line.Split().Contains("elit") // pseudo-overload of String.Split

根据您对“单词”的定义,您可能需要一个更高级的过滤器(正则表达式,如Domenic的答案)。

答案 1 :(得分:8)

var regex = new Regex(@"^.*\Welit\W.*$", RegexOptions.Multiline);
string result = regex.Replace(original, "enim vehicula pellentesque.");

RegexOptions.Multiline是关键;它表示应用^,(=“开头”)和$(=“结束”)来表示行的开头和结尾,而不是字符串的开头和结尾。

\Welit的任意一侧查找非单词字符,例如fooelit将不匹配,但foo elit将会匹配。

答案 2 :(得分:1)

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