我有一个从多行文本框复制的字符串.我正在寻找一种方法来替换包含特定短语的整行.例如,字符串如下所示:
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)
有快速的方法吗?
谢谢
如果您要替换包含该文本的所有行,您可以执行以下操作:
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的答案).
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会.