我在
下面有一个字符串var input= "dbo.xyx.v1.UserDefinedFunction";
所需的输出将是“xyx.v1”;
我的尝试是
var input = "dbo.xyx.v1.UserDefinedFunction";
var intermediate = input.Split('.').Skip(1);
var res = intermediate.Reverse().Skip(1).Aggregate((a, b) => b + "." + a);
工作得很好..但任何其他适当而优雅的方法?
请注意,它可以是任何部分(在示例中我只显示了4个部分)
e.g。 输入:“dbo.part1.part2.part3.part4.UserDefinedFunction” 输出:“part1.part2.part3.part4”
答案 0 :(得分:2)
这将始终返回字符串的中间部分,该部分可以是一个或两个部分(根据总部件编号)。
var input = "dbo.xyx.v1.UserDefinedFunction";
string[] tokens = input.Split('.');
int midIndex = (tokens.Length - 1) / 2;
IEnumerable<int> midIndices = midIndex % 2 == 0
? new[] { midIndex }
: new[] { midIndex, midIndex + 1 };
string mid = string.Join(".", tokens.Where((t, i) => midIndices.Contains(i)));
所以在这种情况下它返回xyx.v1
,对于字符串bo.xyx.v1
,它返回v1
,因为那是唯一的中间部分。
答案 1 :(得分:1)
如果您需要使用LINQ,可以使用Skip(1).Take(2)
和string.Join
,如下所示:
var parts = input.Split('.');
var res = string.Join(".", parts.Skip(1).Take(parts.Length-2));
如果您需要丢弃第一个和最后一个部分,那么您可以使用Substring
,如下所示:
var start = input.IndexOf('.')+1;
var end = input.LastIndexOf('.')-1;
var res = input.Substring(start, end-start+1);
最后,您可以使用正则表达式,如下所示:
var res = Regex.Replace(input, "^[^.]+[.](.+)[.][^.]+$", "$1");
答案 2 :(得分:1)
var input = "dbo.xyx.v1.UserDefinedFunction";
var res = string.Join(".", input.Split('.').Skip(1).Take(2));
答案 3 :(得分:1)
string output= input.Substring(input.IndexOf('.') + 1,
input.LastIndexOf('.') - input.IndexOf('.') - 1);
答案 4 :(得分:1)
var input = "dbo.xyx.v1.UserDefinedFunction";
var start = input.IndexOf('.');
var end = input.LastIndexOf('.');
string output;
if (start < end)
{
output = input.Substring(start+1, end-start-1);
}
else
{
output = input;
}
答案 5 :(得分:0)
var input = "dbo.xyx.v1.UserDefinedFunction";
var intermediate = input.Split('.');
var res = string.Join(".", intermediate[1],intermediate[2]);
任何零件版本的编辑
var res = string.Join(".", intermediate.Skip(1).Take(intermediate.Length - 2));
答案 6 :(得分:0)
您可以简化它并执行:
var split = input.Split(".");
var result = String.Join(".", split[1], split[2]);
无需Skip
或Take
。
答案 7 :(得分:0)
[TestClass]
public class UnitTest2
{
[TestMethod]
public void TestMethod1()
{
var ret = "this.is.my.test.string".MySplit(".", new int[] {0,1,4 });//this.is.string
}
}
public static class Process {
public static string MySplit(this string Source, string seprator, int[] positionTokeep) {
var items = Source.Split(seprator.ToCharArray());
string ret = string.Empty;
for (int i = 0; i < positionTokeep.Length; i++) {
ret += items[positionTokeep[i]] + seprator;
}
if (!string.IsNullOrWhiteSpace(ret)) {
ret = ret.Substring(0,ret.Length - seprator.Length);
}
return ret;
}
}