Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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#_Regex - Fatal编程技术网

C# 要匹配属性类型C的正则表达式#

C# 要匹配属性类型C的正则表达式#,c#,regex,C#,Regex,我有一个程序,我必须检查是否有任何自动属性类型与类名匹配 例如,如果我有: public class User { //Some code here } public class Cars { public string Brand {get; set;} public string YearModel {get; set;} public List<User> HasRented {get; set;} } 公共类用户 { //这里有一些代码 } 公车 {

我有一个程序,我必须检查是否有任何自动属性类型与类名匹配

例如,如果我有:

public class User 
{
   //Some code here
}


public class Cars
{
  public string Brand {get; set;}
  public string YearModel {get; set;}
  public List<User> HasRented {get; set;}
}
公共类用户
{
//这里有一些代码
}
公车
{
公共字符串品牌{get;set;}
公共字符串模型{get;set;}
公共列表{get;set;}
}
现在,我已经有了匹配类名的代码,所以我可以从“公共类用户”中获取名称“用户”。问题是,我需要正则表达式从“
public List{get;set;}
”中获取“
List
”。当然,我想得到所有的属性类型。因此,我还希望两个“字符串”在正则表达式上匹配

如果这对我有帮助的话,我已经有了一个获取属性名称的正则表达式,那么也许有人可以帮我修改它以获取属性的类型

正则表达式:\w+(?=\s*{\s*get\b)


编辑:忘记提到我将源代码作为字符串,这就是为什么我想将其与正则表达式匹配。更清楚的是:我唯一需要帮助的是正则表达式从包含自动属性的类的文本中获取属性类型。而不是与类名匹配。

正则表达式
^\s*带有修饰符的public\s+([^\s]+)\s+[^\s]+\s+\{[^\}\n]+\}
全局和多行将返回属性的类名

使用正则表达式解析代码是没有用的,因为属性的类型不限于1级泛型,可以是类似的任何类型

List<SortedList<string, User>>
以下是输出:

Type: User
Type: Cars
    Property: Brand, Return Type: System.String
    Property: YearModel, Return Type: System.String
    Property: HasRented, Return Type: System.Collections.Generic.List`1[User]

您可以通过以下方式获取名称和类型:

(?<type>[^\s]+)\s(?<name>[^\s]+)(?=\s\{get;)
(\S+(?:<.+?>)?)(?=\s\w+\s\{get;)
(?[^\s]+)\s(?[^\s]+)(?=\s\{get;)
或者只需键入:

(?<type>[^\s]+)\s(?<name>[^\s]+)(?=\s\{get;)
(\S+(?:<.+?>)?)(?=\s\w+\s\{get;)
(\S+(?:)?)(?=\S\w+\S\{get;)

我正确地理解了这一点:您将源代码作为字符串,并希望从中提取信息?代码没有编译到您的程序集中,因此您可以直接使用
Cars
User
类型?如果您想从C源代码中提取信息,为什么不使用Roslyn?看起来更可靠是的,对不起。忘了提到我的源代码是字符串。public\s(?[^\s]+)\s[^\s]+\s\{[^\}\n]+\}Rinecamo我在上尝试了你的正则表达式,但没有得到Matchi Keith。也许我有点不清楚,但我已经有代码来检查正则表达式返回的值是否与类名匹配。我需要的唯一代码实际上是正则表达式来匹配属性的类型。因此,如果属性是
公共字符串名{get;set;}
正则表达式应与
字符串匹配
。如果属性是
公共列表{get;set;}
正则表达式应该匹配
列表
。如果有一个类具有多个属性,正则表达式应该匹配该类中的所有属性类型谢谢,但这不是我的情况。在我的情况下,正则表达式可以做到这一点。谢谢!第二个正则表达式正是我要找的。实际上,我也需要第一个正则表达式。如果我能给你投票的话两次了,先生,我会!@Jokerish然后最好修改它,使之与第二个匹配,检查,没有它,它将无法匹配更复杂的泛型类型