我不认为仅使用正则表达式这是可能的,但我不是专家所以我认为这值得一问。
我正在尝试使用 .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 是答案。
