从架构和表名称中提取表名称

时间:2015-12-02 16:19:21

标签: c#

我试图从格式为

的字符串中获取表名
  

[SCHEMANAME]。[表名]

我认为这可以通过拆分来完成,但不确定如何处理尾随]字符。

6 个答案:

答案 0 :(得分:2)

一个简单的方法是在这个小LINQ查询中使用String.SplitString.Trim

string input = "[schemaname].[tablename]";
string[] schemaAndTable = input.Split('.')
    .Select(t => t.Trim('[', ']'))
    .ToArray();

string schema = schemaAndTable[0];
string table  = schemaAndTable[1];

使用IndexOfSubstring的另一个人:

int pointIndex = input.IndexOf('.');
if(pointIndex >= 0)
{
    string schema = input.Substring(0, pointIndex).Trim('[', ']');
    string table  = input.Substring(pointIndex + 1).Trim('[', ']');
}

答案 1 :(得分:2)

//find the seperator
var pos = str.IndexOf('].[');
if (pos == -1)
    return null; //sorry, can't be found.

//copy everything from the find position, but ignore ].[
// and also ignore the last ]
var tableName = str.Substr(pos + 3, str.Length - pos - 4);

答案 2 :(得分:1)

只是与此不同的是另一个带有正则表达式的版本;

var result = Regex.Match(s, @"(?<=\.\[)\w+").Value;

答案 3 :(得分:0)

var res = input.Split('.')[1].Trim('[', ']');

另一个LINQ解决方案:

var tableName = String.Join("", input.SkipWhile(c => c != '.').Skip(1)
                                     .Where(c => Char.IsLetter(c)));

答案 4 :(得分:0)

拆分3个字符。即[.]选项RemoveEmptyEntries非常自我解释。

var result = input.Split(new [] {'[','.',']'}, StringSplitOptions.RemoveEmptyEntries);

答案 5 :(得分:0)

试试这个:

var tableAndSchema = "[schemaname].[tablename]";
var tableName = tableAndSchema
    .Split('.')[1]
    .TrimStart('[')
    .TrimEnd(']');

Split会将字符串拆分为.字符并将其转换为包含两个字符串的数组:

[0] = "[schemaname]"
[1] = "[tablename]"

第二个(索引1)元素是您想要的元素。 TrimStartTrimEnd将删除开头和结尾括号。

另一种方法是使用正则表达式:

var tableAndSchema = "[schemaname].[tablename]";
var regex = new Regex(@"\[.*\].\[(.*)\]");
var tableName = regex.Match(tableAndSchema).Groups[1];

正则表达式模式\[.*\].\[(.*)\]为第二对括号中的字符创建一个捕获组,让您轻松将其拉出。