我从多行文本框中复制了一个字符串。我正在寻找一种方法来替换包含特定短语的整行。 例如,字符串如下所示:
Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Suspendisse egestas.
所以我想找到一个方法来替换包含例如短语elit
的整行和新行enim vehicula pellentesque.
,以便重新构建:
Lorem ipsum dolor sit amet,
enim vehicula pellentesque.
Suspendisse egestas.
有快速的方法吗?
由于
答案 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
是关键;它表示应用^
,(=“开头”)和$
(=“结束”)来表示行的开头和结尾,而不是字符串的开头和结尾。
\W
在elit
的任意一侧查找非单词字符,例如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");
}
}
}