Regex提取某些行的数据,同时丢弃其他行的数据
本文关键字:数据 其他 提取 Regex | 更新日期: 2023-09-27 18:11:19
我有这些SQL DB创建脚本,我想从中提取表名以创建GRANT访问。
提取实际名称没有问题:
<>之前^CREATE TABLE (['w'.]+)['r'n]+之前然而,如果我只想做一个Regex.Replace
来从这些名字(在组1中)创建GRANT语句,我就会被所有不匹配的行所困,我想摆脱。
。
为:CREATE TABLE dbo.t_MyType
(
ID INTEGER PRIMARY KEY IDENTITY,
TypeName VARCHAR(16) NOT NULL
)
CREATE UNIQUE INDEX IndexMyType ON dbo.t_MyType (TypeName)
CREATE TABLE dbo.t_MyType2
(
ID INTEGER PRIMARY KEY IDENTITY,
TypeName VARCHAR(16) NOT NULL
)
CREATE UNIQUE INDEX IndexMyType ON dbo.t_MyType2 (TypeName)
我:
GRANT SELECT ON dbo.t_MyType TO db_read(
ID INTEGER PRIMARY KEY IDENTITY,
TypeName VARCHAR(16) NOT NULL
)
CREATE UNIQUE INDEX IndexMyType ON dbo.t_MyType (TypeName)
GRANT SELECT ON dbo.t_MyType2 TO db_read(
ID INTEGER PRIMARY KEY IDENTITY,
TypeName VARCHAR(16) NOT NULL
)
CREATE UNIQUE INDEX IndexMyType ON dbo.t_MyType2 (TypeName)
所以问题是:什么是正则表达式和替换字符串对,我需要使用,以获得以下结果?
GRANT SELECT ON dbo.t_MyType TO db_read
GRANT SELECT ON dbo.t_MyType2 TO db_read
不做替换,只通过Regex返回的MatchCollection枚举。匹配并构建一个新的sql文件。(你需要稍微修改一下你的正则表达式)
static void Main(string[] args)
{
string query =
@"CREATE TABLE dbo.t_MyType
(
ID INTEGER PRIMARY KEY IDENTITY,
TypeName VARCHAR(16) NOT NULL
)
CREATE UNIQUE INDEX IndexMyType ON dbo.t_MyType (TypeName)
CREATE TABLE dbo.t_MyType2
(
ID INTEGER PRIMARY KEY IDENTITY,
TypeName VARCHAR(16) NOT NULL
)
CREATE UNIQUE INDEX IndexMyType ON dbo.t_MyType2 (TypeName)";
string matchString = @"CREATE TABLE (['w'.]+)";
var matches = Regex.Matches(query, matchString);
StringBuilder sb = new StringBuilder();
foreach (Match match in matches)
{
sb.AppendFormat("GRANT SELECT ON {0} TO db_read", match.Groups[1]).AppendLine();
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}