4

我有一个字符串如下

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 个部分)

例如输入:“dbo.part1.part2.part3.part4.UserDefinedFunction” 输出:“part1.part2.part3.part4”

4

8 回答 8

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.v1v1

于 2013-04-25T10:45:55.990 回答
1
   string output= input.Substring(input.IndexOf('.') + 1, 
                  input.LastIndexOf('.') - input.IndexOf('.') - 1);
于 2013-04-25T10:41:42.097 回答
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;
}
于 2013-04-25T10:46:38.473 回答
1

如果需要使用 LINQ,可以使用Skip(1).Take(2)and 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");
于 2013-04-25T10:38:29.753 回答
1
var input = "dbo.xyx.v1.UserDefinedFunction";
var res = string.Join(".", input.Split('.').Skip(1).Take(2));
于 2013-04-25T10:39:25.353 回答
0

您可以简化它并执行以下操作:

var split = input.Split(".");
var result = String.Join(".", split[1], split[2]);

不需要Skipor Take

于 2013-04-25T10:42:26.193 回答
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;
    }
}
于 2013-04-25T10:44:46.780 回答
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));
于 2013-04-25T10:38:36.670 回答