gpt4 book ai didi

c# - 如何使用正则表达式在多行文本中查找关键模式

转载 作者:行者123 更新时间:2023-11-30 12:31:35 25 4
gpt4 key购买 nike

我正在使用正则表达式来解析存储过程以便修改它们。这是我的示例文本:

DECLARE @TempTable TABLE
(
TempID int IDENTITY PRIMARY KEY,
AMFID smallint,
AppModID smallint,
AppID tinyint,
ModID smallint,
FPID smallint,
URL varchar(100),
SortIndex smallint,
[AppName] varchar(100),
ModName varchar(100),
FPName varchar(100),
WUCData varchar(7000)
)

-- Fill the temp table
INSERT INTO @TempTable
(
AMFID,
AppModID,
AppID,
ModID,
FPID,
URL,
SortIndex,
[AppName],
ModName,
FPName,
WUCData
)
SELECT
siAppModFP.AMFID,
siAppModFP.AppModID,
siAppModule.AppID,
siAppModule.ModID,
siAppModFP.FPID,
siAppModFP.URL,
siAppModFP.SortIndex,
siApplication.[AppName],
siModule.ModName,
siFP.FPName,
dbo.funcGetAppModFPWUC(siAppModFP.AMFID)
FROM siApplication WITH (NOLOCK)

...

我只想得到这部分:

DECLARE @TempTable TABLE
(
TempID int IDENTITY PRIMARY KEY,
AMFID smallint,
AppModID smallint,
AppID tinyint,
ModID smallint,
FPID smallint,
URL varchar(100),
SortIndex smallint,
[AppName] varchar(100),
ModName varchar(100),
FPName varchar(100),
WUCData varchar(7000)
)

请注意,它可能会重复多次。我想要文本中所有临时表的声明。我使用了以下常规模式:

string re1 = "(Declare)( )(@)((?:[a-z][a-z0-9_]*))(\\s+)(Table)(\\s+)(\\(.*\\))";
Regex r = new Regex(re1, RegexOptions.Multiline | RegexOptions.IgnoreCase);

但它不起作用。有什么想法吗?

最佳答案

你必须使用单行模式而不是多行模式

单行模式下使用此正则表达式

declare\s*@(?:[a-z]\w*)\s*table.*?\)\s*\)

所以,应该是

string re1 = @"declare\s*@(?:[a-z]\w*)\s*table.*?\)\s*\)";
Regex r = new Regex(re1 ,RegexOptions.Singleline | RegexOptions.IgnoreCase );

尝试一下 here

关于c# - 如何使用正则表达式在多行文本中查找关键模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13097498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com