在特定条件下分割字符串

时间:2019-09-04 07:29:23

标签: c# asp.net-core split

我有一个必须分割具有以下格式的字符串的要求:

1234-5678-91011_ABCD_EFGH

所以我使用下面的代码使其工作并完成:

string str = "1234-5678-91011_ABCD_EFGH";
String[] parts = str.Split("_"); //Spliting The String Here
string part1 = "";
string part2 = "";
string part3 = "";

if (parts.Length > 2 && parts[2] != null)
{
   part1 = parts[0]; //Retrieves The First Part
   part2 = parts[1]; //Second Part
   part3 = parts[2]; //Third Part
}

因此,最终输出是这样的:1234-5678-91011 ABCD EFGH,在这里我需要用破折号表示第一部分。非常基本。现在的要求是: 1234-5678-91011-ABCD-EFGH ,在这里我又要检索它- 1234-5678-91011 。这部分可以是任何东西,数字或单词。我可以用新格式检索第一部分吗?

NB :基本上,这是 1234-5678-91011_ABCD_EFGH 来自与模型属性串联在一起的锚点。因此,默认情况下, 就像这样:

1234 5678 91011
ABCD
EFGH

<a href="./@(item.Part1.Replace(" ", "-") + "_" + item.Part2 + "_" + item.Part3)">@item.Part1 @item.Part2 @item.Part3</a>

单击链接会将我重定向到另一个页面,我需要在其中获取第一部分或第一部分的值。

2 个答案:

答案 0 :(得分:2)

您可以借助正则表达式尝试 match ;如果

  

这部分可以是任何东西,数字或单词

表示我们可以使用\w的任何单词符号,如果它可以是任意符号,但是-,则[^-]可以使用

 using System.Text.RegularExpressions;

 ...

 string source = "1234-5678-91011-ABCD-EFGH";

 // 1234-5678-91011
 string result = Regex.Match(source, @"\w+-\w+-\w+").Value;

您可能希望将零件分为不同的组:

 var match = Regex.Match(source, @"(\w+)-(\w+)-(\w+)");

 if (match.Success) {
    string part1 = match.Groups[1].Value; // "1234"
    string part2 = match.Groups[2].Value; // "5678"
    string part3 = match.Groups[3].Value; // "91011" 

    string all = match.Value;             // "1234-5678-91011"

    ... 
 }

最后,如果字符串必须以数字开头,则将^添加到模式:@"^(\w+)-(\w+)-(\w+)"

答案 1 :(得分:1)

然后串联三个第一项:

string[] parts = str.Split("-");
string part1 = "";
string part2 = "";
string part3 = "";

if(parts.Length > 4)
{
  part1 = $"{parts[0]}-{parts[1]}-{parts[2]}";
  part2 = parts[3];
  part2 = parts[4];
}
else if (parts.Length > 2)
{
  part1 = parts[0]; //Retrieves The First Part
  part2 = parts[1]; //Second Part
  part3 = parts[2]; //Third Part
}

用破折号分割接收到的字符串后。