从c#中的字符串中提取方法参数

时间:2013-10-30 13:57:48

标签: c# string data-extraction

我有一个简单的文件阅读器,它读取了许多.cs文件,搜索具有一个参数的特定方法。如果该方法存在,那么我只想刮除参数的名称。我正在考虑做一个string.Compare(),但后来我不知道如何到达参数开始的字符串的索引。

void NameOfTheMethod(string name)
{} 

在这个例子中,我只想刮掉'名字'。

编辑:在某些情况下,参数也可能是const string。无论如何要绕过那个?

3 个答案:

答案 0 :(得分:2)

你可以使用正则表达式。像

这样的东西

NameOfTheMethod\(.*? (.*?)\)\s*?{

编辑: 测试您的示例,这将仅捕获name(并且无论它是字符串,整数,对象还是其他),而不是string name

EDIT2:

完整示例:

//using System.Text.RegularExpressions;
String input = "void NameOfTheMethod(string name)" + Environment.NewLine + "{}";
Regex matcher = new Regex(@"NameOfTheMethod\(.*? (.*?)\)\s*?{");
Match match = matcher.Match(input);

if (match.Success)
    Console.WriteLine("Success! Found parameter name: " + match.Result("$1"));
else
    Console.WriteLine("Could not find anything.");

答案 1 :(得分:1)

通过提供逐行检索代码,您可以获得:

void NameOfTheMethod(string name)

在名为cdLine的varibale中(例如)

尝试使用这些代码行

//Get Index of the opening parentheses
int prIndex = cdLine.IndexOf("("); // 20

//Cut the parameter code part
string pmtrString = cdLine.Substring(prIndex + 1); 
pmtrString = pmtrString.Remove(pmtrString.Length - 1);//"string name"//"string name"

//Use this line to check for number of parameters
string[] Parameters = pmtrString.Split(',');

// If it is 1 parameter only like in your example
string[] ParameterParts = pmtrString.Split(' ');// "string", "name"
string ParameterName = ParameterParts[ParameterParts.Length - 1];// "name"

// The ParameterName is the variable containing the Parameter name

希望这有帮助

答案 2 :(得分:0)

这个正则表达式:

(?<=NameOfTheMethod\().+(?=\))
如果前面有string name,后面跟NameOfTheMethod(

将会抓取)