从架构和表名中提取表名

本文关键字:提取 | 更新日期: 2023-09-27 18:25:19

我正试图从以下格式的字符串中获取表名:

[schemaname]。[表名]

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

从架构和表名中提取表名

一个简单的方法是在这个小的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('[', ']');
}
//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);

不同的是,这里有另一个带有regex的版本;

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

按3个字符拆分。即具有选项CCD_ 6的CCD_。

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

试试这个:

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

Split将拆分.字符上的字符串,并将其转换为两个字符串的数组:

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

第二个(索引1)元素就是您想要的。CCD_ 9和CCD_。


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

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

正则表达式模式'[.*'].'[(.*)']为第二对括号中的字符创建一个捕获组,并使您可以轻松地将它们拉出。

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

另一个LINQ解决方案:

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