gpt4 book ai didi

c# regex - 从类文件 (.cs) 中选择类属性名称、方法名称和字段

转载 作者:太空狗 更新时间:2023-10-29 23:16:38 25 4
gpt4 key购买 nike

我想匹配(从类文件中选择)方法名称、属性名称和字段名称。

这是示例类:

class Perl
{
string _name;
public string Name { get; set; }
public Perl()
{
// Assign this._name
this._name = "Perl";
// Assign _name
_name = "Sam";

// The two forms reference the same field.
Console.WriteLine(this._name);
Console.WriteLine(_name);
}
public static string doSomething(string test)
{
bla test;
}
}

我得到了方法的代码:

(?:public|private|protected)([\s\w]*)\s+(\w+)\s*\(\s*(?:\w+\s+(\w+)\s*,?\s*)+\)

我有问题:

  • 上面的正则表达式代码获取了所有方法并且运行良好但是我也希望它选择方法名称但没有参数和访问器。所以从 exaplmce 类使用我的代码结果将是:public Perl()public static doSomething(string test) 但我想要那种结果:Perl()doSomething( ) 。所以 -我的代码匹配良好,但我希望结果像我一样显示写在前一句。
  • 如何选择属性?显示结果:类型和属性名称。因此,示例类的结果将是:string Name
  • 如何选择带结果的字段:键入 field_name。以防万一将是:string _name

最佳答案

使用这个正则表达式

方法

(?:public\s|private\s|protected\s|internal\s)?[\s\w]*\s+(?<methodName>\w+)\s*\(\s*(?:(ref\s|/in\s|out\s)?\s*(?<parameterType>\w+)\s+(?<parameter>\w+)\s*,?\s*)+\)

并获取名为 methodNameparameterTypeparameter 的组。

对于字段:

(?:public\s|private\s|protected\s)\s*(?:readonly\s+)?(?<type>\w+)\s+(?<name>\w+)

并获取名为 typename 的组。

例如,您的方法代码可以是这样的:

var inputString0 = "public void test(string name, out int value)\r\nvoid test(string name, int value)";
foreach (Match match in Regex.Matches(inputString0, @"(?:public\s|private\s|protected\s)?[\s\w]*\s+(?<methodName>\w+)\s*\(\s*(?:(ref\s|/in\s|out\s)?\s*(?<parameterType>[\w\?\[\]]+)\s+(?<parameter>\w+)\s*,?\s*)+\)"))
{
var methodName = match.Groups["methodName"].Value;
var typeParameterPair = new Dictionary<string, string>();
int i = 0;
foreach (var capture in match.Groups["parameterType"].Captures)
{
typeParameterPair.Add(match.Groups["parameterType"].Captures[i].Value, match.Groups["parameter"].Captures[i].Value);
i++;
}
}

您可以使用 Irony - .NET Language Implementation Kit也来自 codeplex

关于c# regex - 从类文件 (.cs) 中选择类属性名称、方法名称和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com