gpt4 book ai didi

c# - 使用正则表达式替换删除行

转载 作者:太空狗 更新时间:2023-10-30 01:17:37 28 4
gpt4 key购买 nike

我正在尝试从文件中删除以相同单词开头的行。我非常确定正则表达式是正确的,而且我非常确定它不起作用。我想也许这样行不通,所以我尝试用一​​个非空字符串替换。然而它不起作用。任何建议如何解决这个问题或如何以其他方式做同样的事情?

string pattern = @"^smth";
Regex rgx = new Regex(pattern);
File.WriteAllText(path, rgx.Replace(File.ReadAllText(path), ""));

最佳答案

为此你不需要正则表达式,我认为你只需要逐行读取文件,并检查每一行是否以 smth 开头。要启用对同一位置的写入,只需创建文件的临时副本,然后将其删除。

var tmpfile = Path.GetTempPath() + ".mytmpfile.txt";
File.Copy(path, tmpfile, true);
using (var sw = new StreamWriter(path, false, Encoding.UTF8))
{
using (var sr = new StreamReader(tmpfile, true))
{
var line = string.Empty;
while ((line = sr.ReadLine()) != null)
{
if (!line.Trim().StartsWith("smth"))
sw.WriteLine(line);
}
}
File.Delete(tmpfile);
}

你的正则表达式还不错,但是如果你需要将整个文件读入一个变量,然后用正则表达式处理多行文本,你需要使用多行模式:string pattern = @"(?m)^smth";(?m) 将强制 ^ 匹配的开头,而不是整个字符串的结尾。或者将 RegexOptions.Multiline 标志与 Regex.Replace 一起使用。

更新:

您的方法是有效的,但正则表达式应该类似于 (?m)^\s*smth\b.*(?:\r?\n|\z):

string pattern = @"(?m)^\s*smth\b.*(?:\r?\n|\z)";
Regex rgx = new Regex(pattern);
File.WriteAllText(path, rgx.Replace(File.ReadAllText(path), ""));

但是,如果您有大文件,我宁愿使用非正则表达式解决方案。

关于c# - 使用正则表达式替换删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com