如何在相同的char之间提取字符串

时间:2018-05-24 18:08:23

标签: c#

我有一个字符串“ABD-DDD-RED-Large”,需要提取“DDD-RED”

使用Split我有:

  var split = "ABD-DDD-RED-Large".Split('-');
  var first = split[0];
  var second = split[1];
  var third = split[2];
  var fourth = split[3];
  string value = string.Join("-", second, third);

只是想知道是否有更短的代码

4 个答案:

答案 0 :(得分:1)

如果你只想要一个总是4部分(由NestedScrollView分隔)字符串的第二部分和第三部分,你可以用LINQ对它进行排序:

-

输入:string value = string.Join("-", someInputString.Split('-').Skip(1).Take(2)); 会输出:"ABD-DDD-RED-Large"

答案 1 :(得分:0)

我出去了,假设你的字符串总是四个子串除以三个连字符。这样做的主要好处是它只需要基本的String库。

您可以使用:

int firstDelIndex = input.IndexOf('-');
int lastDelIndex = input.LastIndexOf('-');
int neededLength = lastDelIndex - firstDelIndex - 1;
result = input.Substring((firstDelIndex + 1), neededLength);

这是通用的,不关心除连字符之外的任何实际输入。

您可能希望在方法开头使用此方法添加一个catch,以确保在尝试提取请求的子字符串之前输入字符串中至少有两个连字符。

答案 2 :(得分:0)

信息不足。你提到字符串不是静态的。可能是Regex?

string input = "ABD-DDD-RED-Large";
string pattern = @"(?i)^[a-z]+-([a-z]+-[a-z]+)";
string s = Regex.Match(input, pattern).Groups[1].Value;

答案 3 :(得分:0)

使用正则表达式

var match = Regex.Match(split, @".*?-(.*?-.*?)-.*?");
var value = match.Success ? match.Groups[1].Value : string.Empty;