Versuchen Sie diese einfache Lösung:
Hinweis: Sie dies leicht zu Erweiterungsmethode umwandeln kann.
static List<int> FindIndexSpecial(string search, char find, char ignoreIfPreceededBy)
{
// Map each Character with its Index in the String
var characterIndexMapping = search.Select((x, y) => new { character = x, index = y }).ToList();
// Check the Indexes of the excluded Character
var excludeIndexes = characterIndexMapping.Where(x => x.character == ignoreIfPreceededBy).Select(x => x.index).ToList();
// Return only Indexes who match the 'find' and are not preceeded by the excluded character
return (from t in characterIndexMapping
where t.character == find && !excludeIndexes.Contains(t.index - 1)
select t.index).ToList();
}
Verbrauch:
static void Main(string[] args)
{
string test1 = "255\r\n\r\n0\r\n\r\n-1\r\n\r\n255\r\n\r\n1\r";
var matches = FindIndexSpecial(test1, '1', '-');
foreach (int index in matches)
{
Console.WriteLine(index);
}
Console.ReadKey();
}
Sie wissen, dass Sie 'String test1 = @" 255 \ r \ n \ r \ n 0 \ r \ n \ r \ n-1 \ r verwenden \ n \ r \ n255 \ r \ n \ r \ n1 \ r ";" Wenn Sie nicht wollen, dass der Buchstabe n als neue Zeile interpretiert wird? –
versuchen, jedes Element der Zeichenfolge zu teilen und zu vergleichen – techspider