我有一个像这样的字符串列表:
List<string> list = new List<string>();
list.Add("Item 1: #item1#");
list.Add("Item 2: #item2#");
list.Add("Item 3: #item3#");
如何将#strite1#,#item2#等子串添加到新列表中?
如果它包含“#”,我只能得到完整的字符串:
foreach (var item in list)
{
if(item.Contains("#"))
{
//Add item to new list
}
}
答案 0 :(得分:11)
您可以查看Regex.Match
。如果您对正则表达式有一点了解(在您的情况下,它将是一个非常简单的模式:"#[^#]+#"
),您可以使用它来提取所有以'#'
开头和结尾的项目以及其他任意数量的项目中间的字符不是'#'
。
示例:
Match match = Regex.Match("Item 3: #item3#", "#[^#]+#");
if (match.Success) {
Console.WriteLine(match.Captures[0].Value); // Will output "#item3#"
}
答案 1 :(得分:3)
这是使用带有LINQ的正则表达式的另一种方式。 (不确定您的确切要求是否参考了正则表达式,所以现在您可能遇到两个问题。)
var list = new List<string> ()
{
"Item 1: #item1#",
"Item 2: #item2#",
"Item 3: #item3#",
"Item 4: #item4#",
"Item 5: #item5#",
};
var pattern = @"#[A-za-z0-9]*#";
list.Select (x => Regex.Match (x, pattern))
.Where (x => x.Success)
.Select (x => x.Value)
.ToList ()
.ForEach (Console.WriteLine);
输出:
#ITEM1#
#ITEM2#
#项目3#
#ITEM4#
#ITEM5#
答案 2 :(得分:2)
LINQ可以很好地完成这项工作:
var newList = list.Select(s => '#' + s.Split('#')[1] + '#').ToList();
或者如果您更喜欢查询表达式:
var newList = (from s in list
select '#' + s.Split('#')[1] + '#').ToList();
或者,您可以使用Botz3000建议的正则表达式,并将它们与LINQ:
组合使用var newList = new List(
from match in list.Select(s => Regex.Match(s, "#[^#]+#"))
where match.Success
select match.Captures[0].Value
);
答案 3 :(得分:1)
代码将解决您的问题。
但如果字符串不包含 #item#
,则会使用原始字符串。
var inputList = new List<string>
{
"Item 1: #item1#",
"Item 2: #item2#",
"Item 3: #item3#",
"Item 4: item4"
};
var outputList = inputList
.Select(item =>
{
int startPos = item.IndexOf('#');
if (startPos < 0)
return item;
int endPos = item.IndexOf('#', startPos + 1);
if (endPos < 0)
return item;
return item.Substring(startPos, endPos - startPos + 1);
})
.ToList();
答案 4 :(得分:0)
这个怎么样:
List<string> substring_list = new List<string>();
foreach (string item in list)
{
int first = item.IndexOf("#");
int second = item.IndexOf("#", first);
substring_list.Add(item.Substring(first, second - first);
}
答案 5 :(得分:0)
你可以通过简单地使用:
来做到这一点 List<string> list2 = new List<string>();
list.ForEach(x => list2.Add(x.Substring(x.IndexOf("#"), x.Length - x.IndexOf("#"))));
答案 6 :(得分:0)
试试这个。
var itemList = new List<string>();
foreach(var text in list){
string item = text.Split(':')[1];
itemList.Add(item);
}