【问题标题】:How to match methods without a specific category如何匹配没有特定类别的方法
【发布时间】:2015-06-12 13:13:55
【问题描述】:

我需要从几个没有特定类别的类中删除一些测试

我怎么匹配?​​

在此示例中,我只想删除方法 'Bar' 和 'BarTwo'

namespace MyNameSpace
{
    /// <summary>
    /// Some Stuff
    /// </summary>
    public class MyClass
    {
        [CategoryA]
        public void Foo()
        {
        }

        public void Bar()
        {
        }

        [CategoryA]
        public void Baz()
        {
        }

        public void BarTwo()
        {
        }
    }
}

【问题讨论】:

    标签: c# regex regex-negation qregexp


    【解决方案1】:

    你可以使用以下来匹配:

    (?<!]\s)public\s+void[^[]+(?=\[|\s*}\s*}$)
    

    并替换为''(空字符串)

    DEMO

    注意1:我假设你所有的方法都以public开头,否则你可以使用以下方法:

    (?<!]\s*)(public|private|protected)\s+void[^[]+(?=\[|\s*}\s*}$)
    

    注意2:我还假设您的方法中不会有任何[]

    【讨论】:

    • 如果方法在文件中的最后一个,这将不会很好。或者方法体内有]
    • 我的方法有不同数量的字符,例如 '}' 或 ']' 或 ')',此外,这些方法中的一个可能是该类的最后一个。测试初始化​​一些集合以与方法的输出进行比较
    • @RaoniZacaron 最后更新了处理方法的答案.. 但是如果你有 [].. 纯正则表达式无法解决问题。
    • @stribizhev 是的.. 考虑到您的第一条评论已更新.. 并且 AFAIK 如果方法非常多样化,则无法使用纯正则表达式解决此问题.. 这就是为什么添加 Note2.. :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多