我试图从格式为
的字符串中获取表名[SCHEMANAME]。[表名]
我认为这可以通过拆分来完成,但不确定如何处理尾随]字符。
答案 0 :(得分:2)
一个简单的方法是在这个小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('[', ']');
}
答案 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)元素是您想要的元素。 TrimStart
和TrimEnd
将删除开头和结尾括号。
另一种方法是使用正则表达式:
var tableAndSchema = "[schemaname].[tablename]";
var regex = new Regex(@"\[.*\].\[(.*)\]");
var tableName = regex.Match(tableAndSchema).Groups[1];
正则表达式模式\[.*\].\[(.*)\]
为第二对括号中的字符创建一个捕获组,让您轻松将其拉出。