c# - 使用正则表达式删除文本 block ,仅匹配第一次出现

标签 c# regex

我需要使用正则表达式从生成的脚本中删除存储过程。例如,我需要删除 usp_Remove:

...
GO
/****** Object:  StoredProcedure [dbo].[usp_Remove] ******/
...
GO
/****** Object:  StoredProcedure [dbo].[usp_Keep]  ******/
...
GO

我尝试了以下正则表达式:

\/*\*\*\*\*\*\* Object:  StoredProcedure \[dbo\]\.\[usp_Remove\][\s\S]*GO

正确选择文本的开头。但它匹配所有内容,直到最后一个“GO”,我需要它匹配直到第一次出现“GO”,以便只删除该存储过程。任何帮助将不胜感激!

最佳答案

我会使用惰性匹配以免过度匹配,并使用正向预测来仅捕获存储过程:

(?si)/\*{6}\s+Object:\s+StoredProcedure\s+\[dbo\]\.\[usp_Remove\]\s+\*{6}\/.*?(?=GO)

示例代码:

var txt = "YOUR_TXT";
var rx = new Regex(@"/\*{6}\s+Object:\s+StoredProcedure\s+\[dbo\]\.\[usp_Remove\]\s+\*{6}\/.*?(?=GO)", RegexOptions.Singleline | RegexOptions.Ignorecase);
var result = rx.Replace(txt, string.Empty);

espresso :

enter image description here

关于c# - 使用正则表达式删除文本 block ,仅匹配第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29858363/

相关文章:

Python 匹配路径中的字符串并替换为先前的路径项

c++ - Qt 和正则表达式

c# - 如何在c#中画圆并移动

c# - MSChart X 和 Y 轴标签在原点重叠

c#多线程文件读取和页面解析

java - 字符串与正则表达式匹配

regex - Visual Basic Excel 正则表达式 {}

c# - 使用正则表达式获取每个反斜杠之间的字符串

c# - 如何在 EF Core 中配置可为空的 1-1 关系?

c# - 在图片框中平移图像后,如何仅保存可见图像