我正在尝试使用C#和regex添加更改日志细节。在下面给定的代码中,我们需要在最新的变更细节之后添加更改日志详细信息。我试过使用regex,但只能匹配更改日志的标题。下面是存储过程中的一个示例脚本,我们试图对SP的、触发器和函数使用相同的代码。如果将regex用于其他对象类型,请告诉我是否有任何限制。
Regex用于匹配changelog标题:((?i)日期\s*(?i)AUTHOR\s*(?i)DESCRIPTION\s*)
输入:
/***********************************************************************************************
PROCEDURE: DEL_ABCD_Table1
PARAMETERS: Sample int
APPLICATION: ABCD
PURPOSE: Deletes all records from the Table1
NOTES:
MODIFIED
DATE AUTHOR DESCRIPTION
---------- -------------- -------------------------------------------------------------
08/08/2012 Jim Initial Version
09/25/2014 Pam Adding Canvas
09/11/2018 Dwight Adding rootbeer
12/24/2019 Angela Adding Catnip
**********************************************************************************************/ 预期产出:
/***********************************************************************************************
PROCEDURE: DEL_ABCD_Table1
PARAMETERS: Sample int
APPLICATION: ABCD
PURPOSE: Deletes all records from the Table1
NOTES:
MODIFIED
DATE AUTHOR DESCRIPTION
---------- -------------- -------------------------------------------------------------
08/08/2012 Jim Initial Version
09/25/2014 Pam Adding Canvas
09/11/2018 Dwight Adding rootbeer
12/24/2019 Angela Adding Catnip
11/01/2019 SK Adding Thats what she said
**********************************************************************************************/ 发布于 2020-11-01 09:32:12
若要匹配,直到上次更改日志之后:
(?i)DATE\s+AUTHOR\s+DESCRIPTION\r?\n--[\s-]+\r?\n(?:(?!\*\*).*\r?\n)*(?=\*\*)解释
(?i)使用不区分大小写的匹配DATE\s+AUTHOR\s+DESCRIPTION\r?\n匹配更改日志头--[\s-]+\r?\n匹配,例如,至少--,后面跟着1+乘以-或空格字符(?:非捕获群(?!\*\*).*\r?\n不以**开头,则匹配整行)*关闭组并重复0+次以匹配所有行(?=\*\*)断言至少用于最后一行的**如果这些值仅由选项卡分隔,则可以使用\t+而不是\s+。
.NET Regex演示
用完全匹配替换,然后是替换字符串和换行符。

https://stackoverflow.com/questions/64629599
复制相似问题