0

我正在阅读 C# 源文件。当我遇到一个字符串时,我想得到它的值。
例如,在以下示例中:

public class MyClass
{
  public MyClass()
  {
    string fileName = "C:\\Temp\\A Weird\"FileName";
  }
}  

我想找回

C:\Temp\A Weird"FileName

是否有现有的程序可以做到这一点?
用所有可能的情况编写解决方案应该非常棘手(@,转义序列......)。
我确信存在这样的程序......
我也想拥有双重功能(将字符串注入 C# 源文件)

提前致谢。
菲利普

PS:
我给出了一个带有文件名的示例,但我正在寻找一种适用于各种字符串的解决方案。

4

3 回答 3

2

我很确定您可以使用 CodeDOM 来读取 C# 代码文件并解析其元素。它会生成一个代码树,然后您可以查找代表strings.

http://www.codeproject.com/Articles/2502/C-CodeDOM-parser

其他 CodeDom 解析器:

http://www.codeproject.com/Articles/14383/An-Expression-Parser-for-CodeDom

NRefactory:https ://github.com/icsharpcode/NRefactory和http://www.codeproject.com/Articles/408663/Using-NRefactory-for-analyzing-Csharp-code

于 2013-09-12T10:30:43.453 回答
1

有一种使用正则表达式提取这些字符串的方法:

  ("(\\"|[^"])*")

这个特定的适用于您的简单示例并提供文件名(包含前导和尾随引号字符);不幸的是,我不能轻易说出它是否适用于更复杂的问题。

为清楚起见,(\\"|[^"])匹配除 之外的任何字符"除非它具有前导\字符。

于 2013-09-12T10:34:07.903 回答
0

只需使用正".*"则表达式来匹配所有字符串值,然后删除尾随的引号并取消转义。

这将允许字符串中的\"字符""

所以两者"C:\\Temp\\A Weird\"FileName"都会"Hello ""World"""匹配

于 2013-09-12T10:30:51.063 回答