我有一个必须分割具有以下格式的字符串的要求:
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>
单击链接会将我重定向到另一个页面,我需要在其中获取第一部分或第一部分的值。
答案 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
}
用破折号分割接收到的字符串后。