Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中从字符串中提取方法参数#_C#_String_Data Extraction - Fatal编程技术网

C# 在c语言中从字符串中提取方法参数#

C# 在c语言中从字符串中提取方法参数#,c#,string,data-extraction,C#,String,Data Extraction,我有一个简单的文件读取器,它读取大量的.cs文件,搜索具有一个参数的特定方法。如果该方法存在,那么我只想刮取参数的名称。我想做一个string.Compare(),但是我不知道如何找到参数开始的字符串的索引 void NameOfTheMethod(string name) {} 在这个例子中,我只想删掉“name” 编辑:在某些情况下,参数也可以是常量字符串。无论如何,要绕过这个问题?您可以使用正则表达式。差不多 nameofMethod\(.*?(.*?)\s*?{ 编辑: 在您的示例中

我有一个简单的文件读取器,它读取大量的.cs文件,搜索具有一个参数的特定方法。如果该方法存在,那么我只想刮取参数的名称。我想做一个string.Compare(),但是我不知道如何找到参数开始的字符串的索引

void NameOfTheMethod(string name)
{} 
在这个例子中,我只想删掉“name”


编辑:在某些情况下,参数也可以是
常量字符串
。无论如何,要绕过这个问题?

您可以使用正则表达式。差不多

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

编辑: 在您的示例中测试,这将只捕获
名称
(并且不管它是字符串、int、对象还是其他),而不是
字符串名称

编辑2:

完整示例:

//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.");

你可以用正则表达式,比如

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

编辑: 在您的示例中测试,这将只捕获
名称
(并且不管它是字符串、int、对象还是其他),而不是
字符串名称

编辑2:

完整示例:

//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.");

你可以用正则表达式,比如

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

编辑: 在您的示例中测试,这将只捕获
名称
(并且不管它是字符串、int、对象还是其他),而不是
字符串名称

编辑2:

完整示例:

//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.");

你可以用正则表达式,比如

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

编辑: 在您的示例中测试,这将只捕获
名称
(并且不管它是字符串、int、对象还是其他),而不是
字符串名称

编辑2:

完整示例:

//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.");
此正则表达式:

(?<=NameOfTheMethod\().+(?=\))
(?此正则表达式:

(?<=NameOfTheMethod\().+(?=\))
(?此正则表达式:

(?<=NameOfTheMethod\().+(?=\))
(?此正则表达式:

(?<=NameOfTheMethod\().+(?=\))

(?通过提供按行检索代码,您将得到以下结果:

void NameOfTheMethod(string name)
在名为cdLine的变量中(例如)

尝试使用这些代码行

//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

希望通过提供按行检索代码的帮助,您将获得以下信息:

void NameOfTheMethod(string name)
在名为cdLine的变量中(例如)

尝试使用这些代码行

//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

希望通过提供按行检索代码的帮助,您将获得以下信息:

void NameOfTheMethod(string name)
在名为cdLine的变量中(例如)

尝试使用这些代码行

//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

希望通过提供按行检索代码的帮助,您将获得以下信息:

void NameOfTheMethod(string name)
在名为cdLine的变量中(例如)

尝试使用这些代码行

//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


希望这能有所帮助

听起来像是RegExt的工作魔鬼在细节中。如果你想要一个防弹的解决方案,那么你需要一个C#解析器。如果没有,那么你需要更明确地说明你正在做的假设,以简化问题。下面是一个人为的例子:
Console.WriteLine(“这会欺骗你:void nameofMethod(字符串名称)是文字字符串的一部分。”)
听起来像是RegExt的工作魔鬼在细节中。如果你想要防弹解决方案,那么你需要一个C#解析器。如果不是,那么你需要更明确地说明你正在做的假设以简化问题。下面是一个精心设计的示例:
Console.WriteLine(“这将欺骗您:方法的void nameofMethod(字符串名称)是文本字符串的一部分。”)
听起来像是RegExt的工作魔鬼在细节中。如果你想要一个防弹的解决方案,那么你需要一个C#解析器。如果不是,那么你需要更明确的假设来简化问题。下面是一个人为的例子:
Console.WriteLine(“这会欺骗你:void NameOfTheMethod(字符串名称))是文本字符串的一部分。”);
听起来像是RegExt的工作魔鬼在细节中。如果你想要防弹解决方案,那么你需要一个C#解析器。如果不是,那么你需要更明确地说明你正在做的假设以简化问题。下面是一个人为的例子:
Console.WriteLine(“这将欺骗您:void NameOfTheMethod(字符串名称)是文本字符串的一部分。”)
谢谢你的代码,但我对正则表达式还比较陌生。你能告诉我如何在一段代码中使用正则表达式吗?也许只是一行或两行代码。使用哪种方法来查找字符串的确切部分?@jonjohnson Regex是一个大话题,但我添加了一个工作示例,应该可以让你开始。嘿,谢谢。但我不是显式搜索'name',因为它可以是任何东西。我正在查找'string'或'const string'关键字后面的变量名。但是感谢您的帮助example@jonjohnson是的,您可以输入
“void NameOfTheMethod(string which)”+Environment.NewLine+“{}"
结果将是
无论什么
是的,但我不知道会是什么。我在字符串关键字后搜索任何类型的名称谢谢代码,但我对正则表达式相当陌生。你能告诉我如何在一段代码中使用它吗?可能只是一行或两行代码。使用哪种方法来查找在字符串的精确部分?@jonjohnson Regex是一个大主题,但我添加了一个工作示例,应该可以让您继续。嘿,谢谢。但我没有显式搜索“name”,因为它可以是任何东西。我在“string”或“const string”关键字后查找变量名。但是感谢您的帮助example@jonjohnson是的,你可以输入<代码>方法的无效名称(字符串)“+Environment.NewLine+”{}
结果将是
无论什么
是的,但我不知道会是什么。我在字符串关键字后搜索任何类型的名称谢谢代码,但我对正则表达式相当陌生。你能告诉我如何在一段代码中使用它吗?可能只是一行或两行代码。使用哪种方法来查找jonjohnson Regex是一个大话题,但我添加了一个工作示例,应该可以让您继续。嘿,谢谢。