如何使用regex查找和替换多行代码?

qpgpyjmq  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(90)

我的.NET项目使用MOQ .NET模拟库。最近,我计划将其从MOQ迁移到NSubstitute。由于我的代码库有很大的变化,我决定使用正则表达式查找和替换。我的问题是,我有以下代码片段。

this.objectStorageMock.Setup(broker =>
    broker.InsertCalendarAsync(someCalendar))
        .ThrowsAsync(npgsqlException);
        
this.objectStorageMock.Setup(broker =>
    broker.DeleteBlobAsync(someFilePath))
        .ThrowsAsync(httpResponseCriticalException);

我需要把它变成这样

this.objectStorageMock.DeleteBlobAsync(someFilePath).ThrowsAsync(httpResponseCriticalException);        

this.objectStorageMock.InsertCalendarAsync(someCalendar).ThrowsAsync(npgsqlException);

所以我用了following正则表达式,

正则表达式模式:

this\.([A-Za-z_][A-Za-z_0-9]*)\.Setup\(broker => broker\.(\w+)\(([^)]*)\)\)\.ThrowsAsync\(([^)]*)\);

替换字符串:

this.$1.$2($3).ThrowsAsync($4);

当原始代码在一行中时,这很好,但它在下面存在多行(因为每个开发人员都以不同的方式格式化代码)。

this.objectStorageMock.Setup(broker =>
    broker.InsertCalendarAsync(someCalendar))
        .ThrowsAsync(npgsqlException);

this.objectStorageMock.Setup(broker =>
    broker.DeleteBlobAsync(someFilePath)).ThrowsAsync(httpResponseCriticalException);

我该怎么处理这个?

j1dl9f46

j1dl9f461#

试试这个正则表达式,我在所有标记之间插入了[\s\r]*,它可以匹配Visual Studio中的任何空格字符(包括换行符)。

this[\s\r]*\.[\s\r]*([A-Za-z_][A-Za-z_0-9]*)[\s\r]*\.[\s\r]*Setup[\s\r]*\([\s\r]*broker[\s\r]*=>[\s\r]*broker[\s\r]*\.[\s\r]*(\w+)[\s\r]*\([\s\r]*([^)]*)[\s\r]*\)[\s\r]*\)[\s\r]*\.[\s\r]*ThrowsAsync[\s\r]*\([\s\r]*([^)]*)[\s\r]*\)[\s\r]*;

相关问题