C# 使用startswith在数组中搜索,并忽略此数组中的前3个字符

C# 使用startswith在数组中搜索,并忽略此数组中的前3个字符,c#,C#,我有string[]\u comboBoxItems,它有271个元素,比如 a1 03154643 a1 03450324 a2 08432155 a1 13549812 现在我想在这个数组中搜索。如果我写03我想得到 a1 03154643 a1 03450324 如何忽略a1(第一个树字母)。我想使用comboBoxItems.startswith(),但我不知道在搜索时如何删除a1您需要首先选择从每个项目的第四个字符开始的子字符串: var text = "03"; var matc

我有string[]\u comboBoxItems,它有271个元素,比如

a1 03154643
a1 03450324
a2 08432155
a1 13549812
现在我想在这个数组中搜索。如果我写03我想得到

a1 03154643
a1 03450324

如何忽略a1(第一个树字母)。我想使用comboBoxItems.startswith(),但我不知道在搜索时如何删除a1

您需要首先选择从每个项目的第四个字符开始的子字符串:

var text = "03";
var matches = comboBox.Items.OfType<string>()
                            .Where(s => s.SubString(3).StartsWith(text));

您需要首先选择从每个项目的第四个字符开始的子字符串:

var text = "03";
var matches = comboBox.Items.OfType<string>()
                            .Where(s => s.SubString(3).StartsWith(text));
带正则表达式的完整代码

public static string[] Filter(this string[] source, string pattern) {
  var rx = new Regex(".*? " + pattern);
  return source.Where(s => rx.IsMatch(s)).ToArray();
}
使用以下各项进行测试:

var values = new string[] { "a1 03154643", "a1 03450324", "a2 08432155", "a1 13549812" };
var res = values.Filter("03");
请注意,它仍然需要错误处理和参数验证才能为生产做好准备。

正则表达式的完整代码

public static string[] Filter(this string[] source, string pattern) {
  var rx = new Regex(".*? " + pattern);
  return source.Where(s => rx.IsMatch(s)).ToArray();
}
使用以下各项进行测试:

var values = new string[] { "a1 03154643", "a1 03450324", "a2 08432155", "a1 13549812" };
var res = values.Filter("03");

请注意,它仍然需要错误处理和参数验证才能为生产做好准备。

将在少于3个字符的字符串上失败。@Matten:纯粹是旁注,以防万一:)@leppie:更新了答案,但根据OP的描述,这听起来不太可能。@senzacionale是的,只需替换
s.SubString(3)
带有
s.SubString(s.IndexOf(“”+1)
@senzacionale要匹配到第一个“”,请使用此lambda:(s=>Regex.IsMatch(s,“*”?+text))。这使用了一个非贪婪的正则表达式来匹配任意数量的字符,直到第一个“.”。对于少于3个字符的字符串,将失败。@Matten:纯粹是一个旁注,以防万一:)@leppie:更新了答案,但根据OP的描述听起来不太可能。@senzacionale是的,只需将
s.SubString(3)
替换为
s.SubString(s.IndexOf(“”)+1)
@senzacionale匹配到第一个“”使用此lambda:(s=>Regex.IsMatch(s,“*”?+text))。这使用非贪婪正则表达式匹配到第一个“”的任意数量的字符。