Skip to main content
 首页 » 编程设计

c#之正则表达式环视

2024年01月29日29傻小

我不认为仅使用正则表达式这是可能的,但我不是专家所以我认为这值得一问。

我正在尝试使用 .NET 正则表达式对 C# 代码进行大量搜索和替换。我想要做的是找到一行代码,其中对 DateTime 类型的变量调用特定函数。例如:

axRecord.set_Field("CreatedDate", m_createdDate); 

而且我会知道它是一个 DateTime 变量 b/c 在该代码文件的前面将是以下行:

DateTime m_createdDate; 

但似乎我不能在负面回顾中使用命名组,例如:

(?<=DateTime \k<1>.+?)axRecord.set_[^ ]+ (?<1>[^ )]+) 

如果我尝试像这样匹配变量声明和函数调用之间的所有文本:

DateTime (?<1>[^;]+).+?axRecord.set.+?\k<1> 

它将找到第一个匹配项 - 首先基于声明的第一个变量 - 但随后找不到任何其他匹配项,因为代码布局如下:

DateTime m_First; 
DateTime m_Second; 
... 
axRecord.set_Field("something", m_First); 
axRecord.set_Field("somethingElse", m_Second); 

第一个匹配包含第二个变量声明。

是否有仅使用正则表达式来执行此操作的好方法,还是我必须在我的逻辑中求助于脚本?

请您参考如下方法:

看看我对这个问题的回答Get a methods contents from a C# file

它提供指向页面的链接,这些页面显示如何使用内置的 .net 语言解析器来简单可靠地执行此操作(即,不是通过询问“我正在搜索的用法看起来像什么”,而是通过正确解析代码使用 VS 代码解析工具)。

我知道这不是 RegEx 答案,但我不认为 RegEx 是答案。