在c#中获取字符串的各个部分并将它们组合起来
本文关键字:起来 组合 个部 获取 字符串 | 更新日期: 2023-09-27 18:17:24
我有一个这样的字符串:C:'Projects'test'whatever'files'media'10'00'00'80'test.jpg
现在,我要做的是动态地组合最后4个数字,在本例中,结果是10000080。我的想法是把它们分开,然后以某种方式组合起来,有没有更简单的方法?我不能依赖于数组索引,因为路径也可以更长或更短。
有什么好办法吗?
谢谢:)
使用字符串的紧凑方式。连接和Regex.Split.
string text = @"C:'Projects'test'whatever'files'media'10'00'00'80'test.jpg";
string newString = string.Join(null, Regex.Split(text, @"[^'d]")); //10000080
使用字符串。分裂
String toSplit = "C:'Projects'test'whatever'files'media'10'00'00'80'test.jpg";
String[] parts = toSplit.Split(new String[] { @"'" });
String result = String.Empty;
for (int i = 5, i > 1; i--)
{
result += parts[parts.Length - i];
}
// Gives the result 10000080
如果最后一部分始终是文件名,则可以依赖数组索引。因为最后一部分总是
array_name [array_name。长度- 1]
之前的4个部分可以通过
找到array_name [array_name。长度- 2]
array_name [array_name。长度- 3]
等如果你总是想要组合最后四个数字,拆分字符串(使用'作为分隔符),从最后一部分开始计数,取4个数字,或4个几乎是最后的部分。
如果你想取所有的数字,只需从头到尾扫描字符串,只复制数字到一个新的字符串
string input = "C:'Projects'test'whatever'files'media'10'00'00'80'test.jpg";
string[] parts = toSplit.Split(new char[] {''''});
IEnumerable<string> reversed = parts.Reverse();
IEnumerable<string> selected = reversed.Skip(1).Take(4).Reverse();
string result = string.Concat(selected);
这个想法是提取部分,将它们反转以只保留最后4个(不包括文件名),然后重新反转以回滚到初始顺序,然后concat.
Using LINQ:
string path = @"C:'Projects'test'whatever'files'media'10'00'00'80'test.jpg";
var parts = Path.GetDirectoryName(path).Split('''');
string numbersPart = parts.Skip(parts.Count() - 4)
.Aggregate((acc, next) => acc + next);
结果:"10000080"
var r = new Regex(@"[^'d+]");
var match = r
.Split(@"C:'Projects'test'whatever'files'media'10'00'00'80'test.jpg")
.Aggregate((i, j) => i + j);
return match.ToString();
查找数字可以使用regex:
(([0-9]{2})''){4}
使用concat all inner Group ([0-9]{2})
来获取您搜索的号码。
这将总是在给定字符串的任何位置找到您搜索的数字。
示例代码:
static class TestClass {
static void Main(string[] args) {
string[] tests = { @"C:'Projects'test'whatever'files'media'10'00'00'80'test.jpg",
@"C:'Projects'test'whatever'files'media'10'00'00'80'some'foldertest.jpg",
@"C:'10'00'00'80'test.jpg",
@"C:'10'00'00'80'test.jpg"};
foreach (string test in tests) {
int number = ExtractNumber(test);
Console.WriteLine(number);
}
Console.ReadLine();
}
static int ExtractNumber(string path) {
Match match = Regex.Match(path, @"(([0-9]{2})''){4}");
if (!match.Success) {
throw new Exception("The string does not contain the defined Number");
}
//get second group that is where the number is
Group @group = match.Groups[2];
//now concat all captures
StringBuilder builder = new StringBuilder();
foreach (var capture in @group.Captures) {
builder.Append(capture);
}
//pares it as string and off we go!
return int.Parse(builder.ToString());
}
}