C# 与包含指定字符的句子不匹配

C# 与包含指定字符的句子不匹配,c#,regex,C#,Regex,我试图在课堂上匹配属性。示例类: public static string ComingSoonPage { get { return "/blog-coming-soon.aspx"; } } public static string EncodeBase64(string dataToEncode) { byte[] bytes = System.Text.ASCIIEncoding.UTF8.GetBytes(dataToEncode); string returnVa

我试图在课堂上匹配属性。示例类:

public static string ComingSoonPage
{
   get { return "/blog-coming-soon.aspx"; }
}

public static string EncodeBase64(string dataToEncode)
{
   byte[] bytes = System.Text.ASCIIEncoding.UTF8.GetBytes(dataToEncode);
   string returnValue = System.Convert.ToBase64String(bytes);
   return returnValue;
}
我正在使用这种正则表达式:

(?:public|private|protected)([\s\w]*)\s+(\w+)[^(]
它不仅匹配属性,而且匹配错误的方法。因此,我希望从匹配中删除包含)的句子。因此,它选择所有但不选择方法(包含)。我如何实现这一点。

尝试匹配
“{
获取{

(public|private|protected|internal)[\s\w]*\s+(\w+)\s*\{\s*get\s*\{

更新

仅匹配属性的名称

(?<=(public|private|protected|internal)[\s\w]*\s+)\w+(?=\s*\{\s*get\s*\{)
其中
\b
匹配一个单词的开头或(在本例中)一个单词的结尾。

尝试匹配
“{
”get{

(public|private|protected|internal)[\s\w]*\s+(\w+)\s*\{\s*get\s*\{

更新

仅匹配属性的名称

(?<=(public|private|protected|internal)[\s\w]*\s+)\w+(?=\s*\{\s*get\s*\{)

其中
\b
匹配一个单词的开头或(在本例中)一个单词的结尾。

这可能是您正在寻找的,而且效果非常好!不过我应该得到一些款待:)


这可能就是你想要的,而且效果非常好!不过我应该得到一些款待:)

根据,请尝试使用:

对于
属性
类型
名称

对于
方法
方法名称
参数类型
参数

(?:public\s | private\s | protected\s | internal\s)?[\s\w]*\s+(?\w+)\s*\(\s*(?:(ref\s |/in\s | out\s)?\s*(?\w+)\s+(?\w+)\s*,?\s*)+)
对于c#代码分析,请参见以下示例:

  • 代码项目
根据,尝试使用:

对于
属性
类型
名称

对于
方法
方法名称
参数类型
参数

(?:public\s | private\s | protected\s | internal\s)?[\s\w]*\s+(?\w+)\s*\(\s*(?:(ref\s |/in\s | out\s)?\s*(?\w+)\s+(?\w+)\s*,?\s*)+)
对于c#代码分析,请参见以下示例:

  • 代码项目

不要忘记
内部
访问修饰符我很困惑,因为你所拥有的应该做你所描述的…不要忘记
内部
访问修饰符我很困惑,因为你所拥有的应该做你所描述的…是的,这是另一种方式;)。但是有没有一种方式,正则表达式不匹配具有特定字符的句子下面是我对你的代码的修改:(public | private | protected | internal)[\s\w]*\s+(\w+)(=\s*\{\s*get\s*\{)。它不包括get in result:)。我经常使用
(?
RegexOptions。单线
模式可以help@OlivierJacot Descombes-仅匹配属性名称的代码无效;)。它不匹配任何内容。@born2fr4g 2路检查可能会有帮助。。检查我的答案是,这是另一种方法;)。但是有没有一种方法使正则表达式不匹配指定字符/单词的句子?下面是我对代码的修改:(public | private | protected | internal)[\s\w]*\s+(\w+(=\s*\{\s*get\s*\{)。它不包括get-in-result:)。我经常使用
(?
RegexOptions。单线模式可能会help@OlivierJacot Descombes-您的“仅匹配属性名”代码无效;)。它不匹配任何内容。@born2fr4g双向检查可能会有所帮助。..chk out my answer这几乎不错,但它不适用于字段;它不匹配任何内容(空匹配)。当我使用你的代码处理该答案中的字段时:我不仅匹配字段,而且匹配属性。这几乎很好,但不适用于字段;它不匹配任何内容(空匹配)。当我使用你的代码处理该答案中的字段时:我不仅匹配字段,而且匹配属性。
Regex r=new Regex(@"(public|private).*?(?=(public|private|$))",RegexOptions.Singleline);
Regex nr=new Regex(@"\(.*?\)\s+\{",RegexOptions.Singleline);
foreach(Match m in r.Matches(yourCodeFile))//extracts all methods and properties
{
if(!nr.IsMatch(m.Value))//shoots down methods
m.Value;//properties only
}
(?:public\s|private\s|protected\s|internal\s)\s*(?:readonly|static\s+)?(?<type>\w+)\s+(?<name>\w+)[\s\r\n]*{
(?:public\s|private\s|protected\s)\s*(?:readonly|static\s+)?(?<type>\w+)\s+(?<name>\w+);
(?: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*)+\)