从字符串中提取子字符串

时间:2016-06-14 07:11:08

标签: c# string split

我有一个DB脚本,我从一个文件中读取并将该脚本放在一个字符串变量中。该文件包含多个要执行的DB脚本。现在我想把那个大字符串分解为子字符串,因为我的字符串找到了GO关键字。

我正在使用

myString.split("Go");

- 注意:" Go"关键字对于执行脚本不区分大小写,它可以是" go"," Go"," GO"或任何东西

但它对我不起作用,因为有一些表或数据库名称包含GO,脚本也分开了。

这是我的剧本:

---- Database New_Db_Gomsle
IF NOT EXISTS (SELECT * FROM user_table_gomsle WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img    varchar(MAX)
END
Go

 --- Database Angolifie_Db
IF NOT EXISTS (SELECT * FROM user_table_Angolifie WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img varchar(MAX)
END
GO                                                                                                                                                                  


ALTER TABLE gotham_Accessories
ALTER COLUMN stationary_count   INT
go

就像退出' Go'脚本中的关键字注释,表名,数据库名称。

我期待结果如

string[] myQueryArray = new string[10];
myQueryArray[0] = "---- Database New_Db_Gomsle

IF NOT EXISTS (SELECT * FROM user_table_gomsle WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img    varchar(MAX)
END
Go"

myQueryArray[1] = " --- Database Angolifie_Db
IF NOT EXISTS (SELECT * FROM user_table_Angolifie WHERE USER id = 1124)
BEGIN
ALTER TABLE user_table_gomsle
ADD user_img varchar(MAX)
END
GO"

myQueryArray[2] = "ALTER TABLE gotham_Accessories
ALTER COLUMN stationary_count   INT
go"

但是我没有得到这样的结果,因为' Go'数据库名称,表名,注释中的关键字。

3 个答案:

答案 0 :(得分:2)

var options = RegexOptions.Multiline | RegexOptions.IgnoreCase;

string[] myQueryArray = Regex.Split(myString, @"^\s*GO\s*$", options);

但即使这个解决方案可能不正确,在这种情况下,如果sql编写如下:

select
    ID,
    GO
from tableName;

其中GO - 单行上的列名。

因此,唯一完全有效的解决方案是sql解析器。

答案 1 :(得分:1)

每个脚本后跟一个新行,在字符串中用\ n或\ r \ n表示。

您可以尝试使用" GO \ r"," GO \ n"来分割字符串。或" GO \ r \ n"

答案 2 :(得分:-1)

你可以试试这个:

string test = "select * from table1 GO select * from table2";
string[] myQueryArray = Regex.Split(test, "GO");

希望这会对你有所帮助。感谢。