我不认为只用正则表达式就可以做到这一点,但我不是专家所以我认为值得一提.
我正在尝试使用.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);
第一个匹配包含第二个变量声明.
有没有一种很好的方法可以用正则表达式来做到这一点,还是我必须在我的逻辑中使用脚本?
看看我对这个问题的答案从C#文件中获取方法内容
它提供了指向页面的链接,这些页面显示了如何使用内置的.net语言解析器来简单可靠地执行此操作(即不是通过询问"我正在搜索的用法",而是通过使用VS代码正确解析代码)解析工具).
我知道这不是RegEx的答案,但我认为RegEx不是答案.