C# 用于提取存储过程名称的更快的正则表达式

C# 用于提取存储过程名称的更快的正则表达式,c#,regex,C#,Regex,我有这个存储过程并给出了一个表名(例如:“usercompanygroup\u tbl”)。我必须提取使用给定表名的存储过程名。 我正在使用正则表达式CREATE PROCEDURE\\s*(?.*\n)(.|\n)*usercompanygroup\u tbl从下面给定的示例.sql文件中提取存储过程,它的执行速度非常慢 我必须在一个大小为GB的目录中对多个文件执行搜索。结果是非常缓慢的。我需要一个更快的正则表达式来提取过程名 我使用的是C#regex引擎 USE [BI] GO

我有这个存储过程并给出了一个表名(例如:“
usercompanygroup\u tbl
”)。我必须提取使用给定表名的存储过程名。
我正在使用正则表达式
CREATE PROCEDURE\\s*(?.*\n)(.|\n)*usercompanygroup\u tbl
从下面给定的示例.sql文件中提取存储过程,它的执行速度非常慢

我必须在一个大小为GB的目录中对多个文件执行搜索。结果是非常缓慢的。我需要一个更快的正则表达式来提取过程名

我使用的是C#regex引擎

 USE [BI]
    GO

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ActiveUsersRelatedCompanies_prc]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[ActiveUsersRelatedCompanies_prc]

    GO

    CREATE PROCEDURE  [dbo].[ActiveUsersRelatedCompanies_prc]  
        @Usercompanyid INT
    AS     
    Begin  

    select * 
    FROM dbo.ActiveUsersRelatedCompanies_tbl (NOLOCK)
    WHERE userCompanyId in (
            select  ucg2.userCompanyId
            from    `userCompanyGrouping_tbl` u
                    inner join userCompanyGrouping_tbl ucg2
                        on isNull(u.subParentCompanyId,u.parentCompanyId) = 
                            (case when u.subParentCompanyId is not null then ucg2.subParentCompanyId 
                                else ucg2.parentCompanyId end)
            where   u.userCompanyId = @userCompanyID
    )       
    order by userCompanyName, userGroup, fullName
    END

如上所述,以下正则表达式将更好:

^\s*[^(--)]{0}(CREATE +PROCEDURE|ALTER +PROCEDURE)\s+(?<ParentProcName>(\w|_|\[|\]|\.)*)
^\s*[^(-)]{0}(创建+过程|更改+过程)\s+(?(\w | | | | \[| \]| \)*)

“ParentProcName”将捕获已创建或更改的存储过程的名称。

首先想到的是:如果符合您的要求,请尝试在regexp的开头添加
^\s*
。@Smileek它不符合我的要求:(你确定正则表达式是你的瓶颈吗?驱动器I/O如何?你是否使用了一些性能分析来证实你的假设?:)@Luaan for IO我正在使用“var txtFiles=Directory.EnumerateFiles(sourceDirectory,“.”,SearchOption.AllDirectories);“读取目录中的文件……所以我认为这是一个大问题