我需要使用正则表达式从生成的脚本中删除存储过程。例如,我需要删除 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 :
关于c# - 使用正则表达式删除文本 block ,仅匹配第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29858363/