从架构和表名中提取表名
本文关键字:提取 | 更新日期: 2023-09-27 18:25:19
我正试图从以下格式的字符串中获取表名:
[schemaname]。[表名]
我认为这可以通过split来完成,但不确定如何处理尾随字符。
一个简单的方法是在这个小的LINQ查询中使用String.Split
和String.Trim
:
string input = "[schemaname].[tablename]";
string[] schemaAndTable = input.Split('.')
.Select(t => t.Trim('[', ']'))
.ToArray();
string schema = schemaAndTable[0];
string table = schemaAndTable[1];
另一种使用IndexOf
和Substring
的
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)));