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*)+\)