Skip to main content
 首页 » 编程设计

c#之从 CS 文件中提取信息的正则表达式

2024年02月05日27kevingrace

下面是我的 C# 代码 CS 文件中行的快照,我正在尝试从我的类文件中提取强制字段或支持字段。

1) 有没有办法让我动态地将 cs 文件加载到 .NET 应用程序中并提取信息,从文件路径加载 cs 文件开始?

2) 针对上述问题,我目前正在通过 Regex 提取信息。

第一个正则表达式 - (m_oSupportedFields.).+?(?=EnumSupported.Mandatory;|EnumSupported.Supported)

结果如下:-

第二个正则表达式 - (..+)\=

结果如下:-

我想要实现的是通过正则表达式(一个正则表达式用于 EnumSupported.Mandatory,一个正则表达式用于 EnumSupported.Supported)提取 Persona.Forename、Personal.Surname 和其他字段。

此外,我正在尝试迎合格式错误的行,例如

m_oSupportedFields.Personal.DOB.Day.Supported=EnumSupported.Supported; (注意等号之间的空格)

或

m_oSupportedFields.Personal.DOB.Day.Supported = EnumSupported.Supported; (注意中间的双空格)

甚至

m_oSupportedFields.Personal.Surname.Supported = EnumSupported.Mandatory; (注意枚举在第二行)

请指教我应该如何为这种情况编译正则表达式。

谢谢。

文本版本已更新

 m_oSupportedFields.Personal.Surname.Supported = EnumSupported.Mandatory; 
            m_oSupportedFields.Personal.Forename.Supported = EnumSupported.Mandatory; 
            m_oSupportedFields.Personal.MiddleName.Supported = EnumSupported.Supported; 
            m_oSupportedFields.Personal.DOB.Day.Supported = EnumSupported.Supported; 
            m_oSupportedFields.Personal.DOB.Month.Supported = EnumSupported.Supported; 
            m_oSupportedFields.Personal.DOB.Year.Supported = EnumSupported.Supported; 

请您参考如下方法:

所以从每一行中,你想提取m_oSupportedFields.之后的部分和之前 .Supported = , 以及 = 之后的部分.您只想忽略 = 之前的空格, 但 = 之后的任何空格.

您的正则表达式将是:^m_oSupportedFields\.([\w\.]+)\.Supported *=\s*(EnumSupported\.\w+);

省略 ^如果您不想要求字符串从一行的开头开始。

使用 C#,您可以像这样访问匹配组:

using System.Text.RegularExpressions; 
 
string regex = @"^m_oSupportedFields\.([\w\.]+)\.Supported *=\s*(EnumSupported\.\w+);"; 
string input = @"m_oSupportedFields.Personal.DOB.Day.Supported=EnumSupported.Supported"; 
 
foreach (Match m in Regex.Matches(input, regex)) 
{ 
    Console.WriteLine(m.Captures[0].ToString()); 
    Console.WriteLine(m.Captures[1].ToString()); 
} 
 
// Console: 
 
// Personal.DOB.Day 
// EnumSupported.Supported