拆分以下字符串的最简单方法是什么:“1、a、2、a、3、a”,然后过滤所有包含“a”的条目以获得结果:[1,2,3]?
谢谢,丽兹
string[] result = "1, a, 2, a, 3, a".Split(',')
.Select(s => s.Trim())
.Where(s => s != "a")
.ToArray();
如果要比较不区分大小写:
string[] result = "1, a, 2, a, 3, a".Split(',')
.Select(s => s.Trim())
.Where(s => !"a".Equals(s, StringComparison.OrdinalIgnoreCase))
.ToArray();
var results = "1, a, 2, a, 3, a".Split(',')
.Select(x => x.Trim())
.Where(x => x != "a")
.ToArray();
一个简单的正则表达式结合 LINQ 可以粗略但有效地管理这个:
public static int[] NumberList(string source, string filter)
{
var split = Regex.Split(source, "(\\d+,\\s*\\w)");
var list = (from s in split where s.EndsWith(filter)
select int.Parse( s.Split(',')[0])).ToArray();
return list;
}
第一个Regex.split
将其拆分为一个包含数字、逗号和字母的数组;然后,LINQ 查询仅从数组中提取以过滤器字母结尾的那些项目,并将逗号之前的部分作为整数数组返回。
示例调用:
var result = NumberList("1, a, 2, b, 3, a, 4, c", "a");
返回:
[1, 3]
(根据您的澄清,这超出了您实际要求的范围 - 它会起作用,但它的作用超出了实际需要)
您可以使用
int tmp;
string[] arr = str.Split(',').
Where(x=>int.TryParse(x, out tmp)).
ToArray();
正则表达式与 Linq
string[] result = "1, a, 2, a, b , 3, a".Split(',')
.Select(s => s.Trim())
.Where(s => Regex.IsMatch(s, @"^\d+$"))
.ToArray();
结果
1、2、3
你可以使用这个:
var arr = "1, a, 2, b, 3, a, 4, c"
.Split(',')
.Select(x => Parse(x))
.Where(x => x != null)
.Select(x => x.Value)
.ToArray();
Parse
方法:
static int? Parse(string value)
{
int result;
if (int.TryParse(value, out result))
{
return result;
}
return null;
}