关于c#:如何仅将字符串的第二部分存储在列表中?


How can I only store the second part of a string in a list?

我有一个仅包含字符串的列表Textlist1。列表中的每个项目都以相同的文本开头:" sentence.text。",但是我只想将字符串的第二部分存储在另一个列表中,我不想存储第一部分" sentence .text。"在列表Textlist2中。

例如:

1
2
List<string> Textlist1 = new List<string>();
List<string> Textlist2 = new List<string>();

完整的字符串存储在Textlist1中。

1
2
Textlist1[0] ="sentence.text.My name is Fred"
Textlist1[1] ="sentence.text.Jenny is my sister"

如何仅将"我的名字是Fred "和" Jenny是我的妹妹"添加到Textlist2?

结果应如下所示:

1
2
Textlist2[0] ="My name is Fred"
Textlist2[1] ="Jenny is my sister"


查看在线结果:https://dotnetfiddle.net/MpswLZ

enter

1
2
3
4
5
6
7
8
List<string> Textlist1 = new List<string>() {
  "sentence.text.My name is Fred",
  "sentence.text.Jenny is my sister"
};

List<string> Textlist2 = new List<string>();

Textlist2 = Textlist1.Select(item => item.Split('.')[2]).ToList();


按句号分割输入字符串,将分割限制为3。然后从分割产生的数组中获取最后一个条目。

1
2
Textlist2[0] = Textlist1[0].Split('.', 3)[2];
Textlist2[1] = Textlist1[1].Split('.', 3)[2];

您可以使用Regex.Replace文本。

1
2
var regex = new Regex("^sentence.text.",RegexOptions.Compiled);
Textlist2.AddRange(Textlist1.Select(x=>regex.Replace(x,string.Empty)));

正则表达式中的"^"确保所需的文本("sentence.text")仅在字符串的开头而不是其他地方匹配。

样本输入

enter

1
2
3
Textlist2= Textlist1
    .Select(i=> i.Substring("sentence.text.".Length))
    .ToList();

1
2
3
4
5
6
7
List<string> Textlist1 = new List<string>
{
 "sentence.text.a",
 "sentence.text.b"
};
string prefix ="sentence.text.";
List<string> Textlist2 = Textlist1.Select(x => x.Substring(prefix.Length)).ToList();

https://dotnetfiddle.net/oFhvfs

最终有很多方法可以做到这一点,这只是一种解决方案。您选择哪种方法取决于图案替换的复杂程度。我采用了一种简单化的方法,因为您的示例是一个非常简单的案例。