【问题标题】:Append string at end of previous change log details in SP在 SP 中先前更改日志详细信息的末尾附加字符串
【发布时间】:2021-02-14 04:02:43
【问题描述】:

我正在尝试使用 C# 和正则表达式添加更改日志详细信息。在下面给出的代码中,我们需要在最新的更改日志详细信息之后添加更改日志详细信息。我曾尝试使用正则表达式,但只能匹配更改日志的标题。下面是来自存储过程的示例脚本,我们也尝试对 SP、触发器和函数使用相同的代码。请让我知道在将正则表达式用于其他对象类型时是否会有任何限制。

用于匹配变更日志标头的正则表达式:((?i)DATE\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
**********************************************************************************************/      

https://regex101.com/r/w351JF/1

【问题讨论】:

  • 您需要正则表达式来附加到文件吗?不知道我明白你在问什么。您可以读取文件,然后在最后一行之前插入一行并重写它。
  • 请在问题中包含您在此处尝试过的正则表达式,而不仅仅是作为外部链接。
  • 更改源标题中的日志。呸!这就是源代码控制的目的。 20 年前可能很常见,但现在它是一种反模式。
  • 您可以查找以“****”开头的第一行
  • 恕我直言,这个问题没有什么不清楚的地方。

标签: c# sql regex


【解决方案1】:

匹配直到最后一个更改日志之后:

(?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+次以匹配所有行
  • (?=\*\*) Assert 例如至少 ** 最后一行

如果值仅由制表符分隔,您可以使用\t+ 而不是\s+

.NET Regex demo

替换为完整匹配,后跟替换字符串和换行符。

【讨论】:

  • 这正是我一直在寻找的,唯一的补充是我将大括号组合成组以便于替换。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 2022-12-23
  • 2016-01-02
  • 2017-07-03
  • 2021-12-16
相关资源
最近更新 更多