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

Dev*_*vel 3 c#

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

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 
Suspendisse egestas.
Run Code Online (Sandbox Code Playgroud)

所以我想找到一个方法elit用新行替换包含例如短语的整行,enim vehicula pellentesque.所以resoult将是:

Lorem ipsum dolor sit amet, 
enim vehicula pellentesque. 
Suspendisse egestas.
Run Code Online (Sandbox Code Playgroud)

有快速的方法吗?

谢谢

Ani*_*Ani 8

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

textBox.Lines = textBox.Lines
                       .Select(line => line.Contains("elit") 
                               ? "enim vehicula pellentesque." : line)
                       .ToArray();
Run Code Online (Sandbox Code Playgroud)

如果你只处理代表线条的字符串,你可以做以下几点:

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());
Run Code Online (Sandbox Code Playgroud)

编辑:正如JG在评论中指出的那样,如果您正在寻找特定的单词 ,这将无效elit.在这种情况下,您需要一个不同于谓词的谓词string.Contains.例如,您可以通过所有空白字符拆分该行,并检查其中一个是否是列入黑名单的单词:

line.Split().Contains("elit") // pseudo-overload of String.Split
Run Code Online (Sandbox Code Playgroud)

根据您对"单词"的定义,您可能需要更高级的过滤器(Regex,如Domenic的答案).

  • #wow我正在编写通常的foreach ..很好地利用了我见过的LINQ (2认同)

Dom*_*nic 8

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

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

\W看看非单词字符的任何一侧elit,所以如fooelit不匹配,但foo elit会.