从STRING获取某些字符串块

时间:2013-03-19 14:40:31

标签: c# string

以下是文字:字符串 txt 保存此值。

  

CREATE TABLE table_name1(column_name11231 data_type,column_name232   data_type,column_name3 data_type,....)

     

CREATE TABLE table_name2(column_name1 data_type,column_name2   data_type,column_name3 data_type,....)

     

CREATE TABLE table_name3(column_name1231 data_type,column_name2   data_type,column_name3 data_type,....)

     

CREATE TABLE table_name4(column_name1231 data_type,column_name1232   data_type,column_name1233 data_type,....)

这是一个样本。我将从文本文件中读取它。那么我只想把每个CREATE TABLE命令放在一个字符串数组中。我怎么能接受它?我尝试过split和substring。但那是愚蠢的。我用愚蠢无效的方式做到了。

就是这样:

string[] totalSp = Regex.Split(txt, "CREATE TABLE");
string[] output = new string[totalSp.Length-1];

for (int i = 1; i < totalSp.Length; i++ )
{
output[i - 1] = "CREATE TABLE " + totalSp[i].Replace("\r\n", "");
}

这给了我想要的输出。但我现在这是糟糕的编码。我不能以任何简单的方式做到吗?

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式查找语句,只要您输入的变化不大。

var matches = Regex.Matches(txt, @"^CREATE TABLE .+", RegexOptions.Multiline);
string[] myArray = matches.Cast<Match>().Select(x => x.ToString()).ToArray();

答案 1 :(得分:0)

您可以使用File.ReadLines来获取这些行,并且很容易在没有正则表达式的情况下过滤掉空行。

var commands = File.ReadLines("filename.txt")
    .Where(line => !string.IsNullOrEmpty(line))
    .ToArray();

如果create table以外的文件中还有其他命令,那么您也可以添加一个简单的过滤器。只需在另一个过滤器之后添加以下命令:

.Where(line => line.StartsWith("CREATE TABLE"))