C# 删除文本C的多行#

C# 删除文本C的多行#,c#,regex,C#,Regex,我的标题可能不正确,但我有一个文件有多行,结构如下: #### ID: 0 NAME: card_inventory #### { ALL CONTENT WOULD GO BETWEEN HERE } #### ENDCARD #### #### ID: 1 NAME: card_inventory #### { ALL CONTENT WOULD GO BETWEEN HERE } { I WANT TO REMOVE ALL REFERENCES TO THIS CARD WITH

我的标题可能不正确,但我有一个文件有多行,结构如下:

#### ID: 0 NAME: card_inventory ####
{ ALL CONTENT WOULD GO BETWEEN HERE }
#### ENDCARD ####

#### ID: 1 NAME: card_inventory ####
{ ALL CONTENT WOULD GO BETWEEN HERE }
{ I WANT TO REMOVE ALL REFERENCES TO
  THIS CARD WITH AN ID OF 1 }
#### ENDCARD ####
所以基本上我的问题是如何定位卡id并删除其内容?我想也许是正则表达式,但我不确定,因为我以前从未尝试过这种事情

==更新====
所以我有点让它工作,但我有一个新问题,当我调用我的删除操作时

using (StreamWriter sw = File.AppendText(this.cardinfo_path))
{
    sw.WriteLine(Regex.Replace(this.cardinfo_path,
        @"####\sID:\s(" + id + @")\s.*?####\sENDCARD\s####", "TACO",
        RegexOptions.Singleline));
}

它只需将文件名添加到文件的末尾。我哪里做错了?我觉得自己是个问这个问题的新手。

我会这样做,一个循环读取文件,一个布尔标志在检测到“#####ID:1”(并在下次检测到“######时重置),如果布尔标志为真,另一个流写入输出文件

代码大致如下(手写):


也许它可以用一个正则表达式来完成,但是一个小的过滤器也可以(如果你想做更多的事情,也可以给你更多的灵活性):


正则表达式可能不是理想的解决方案,但如果您的数据结构清晰,那么它就可以工作

####\sID:\s(1)\s.*?####\sENDCARD\s####

只需将(1)替换为要删除的ID即可

Regex.Replace( filecontents, 
               @"####\sID:\s(" + cardid + @")\s.*?####\sENDCARD\s####",
               "",
               RegexOptions.Singeline );

这个正则表达式的关键是使用
*?
匹配,这样它将匹配id后面第一次出现的ENDCARD。

我被你的问题弄糊涂了。你似乎想要做不同的事情。您是要删除卡还是仅删除其内容。以下内容将仅删除其内容


(?你想在C#中做这件事还是语言无关?我想在C#@insta中做这件事:呵呵,是的,我也这么认为。虽然我认为你的答案中有一个错误。你会跳过打开购物车的那一行,但会发出可能会破坏文件结构的尾卡行。好吧,我要问一个新手问题,问我想问什么我的代码有问题:
code private void delete_card(int-id){using(StreamWriter sw=File.AppendText(this.cardinfo_path)){sw.WriteLine(Regex.Replace(this.cardinfo_path,@“#35;###sID:\s(“+id+@”)\s.?#,RegexOptions.Singleline));}}
我只是在文件后面追加文件名,并在末尾写入文件名。但没有删除该块。我为我的无知道歉。如果要将文件名传递给Regex.Replace,则需要传递文件内容。
####\sID:\s(1)\s.*?####\sENDCARD\s####
Regex.Replace( filecontents, 
               @"####\sID:\s(" + cardid + @")\s.*?####\sENDCARD\s####",
               "",
               RegexOptions.Singeline );