Как написать код, чтобы он выполнялся для каждого встреченного вхождения подстроки в строке?

Какое рекомендуется наиболее эффективное решение для обработки всех вхождений текстовых строк, содержащих номера задач, и выполнения одного и того же кода замены для каждого номера?
  • 15 февраля 2024 г. 6:48
Ответы на вопрос 2
Для выполнения кода для каждого встреченного вхождения подстроки в строке можно использовать цикл или рекурсию. 

Пример кода с использованием цикла:

```
string input = "строка, содержащая номера задач 123 и 456";

string substring = "номера задач"; // подстрока, для которой выполняется код

int startIndex = 0;
int index;

while ((index = input.IndexOf(substring, startIndex)) != -1)
{
    // код для выполнения

    startIndex = index + substring.Length; // обновляем startIndex для следующей итерации
}
```

Пример кода с использованием рекурсии:

```
void ProcessSubstringOccurrences(string input, string substring, int startIndex = 0)
{
    int index = input.IndexOf(substring, startIndex);
    
    if (index != -1)
    {
        // код для выполнения

        ProcessSubstringOccurrences(input, substring, index + substring.Length); // рекурсивный вызов для следующей итерации
    }
}

string input = "строка, содержащая номера задач 123 и 456";
string substring = "номера задач"; // подстрока, для которой выполняется код

ProcessSubstringOccurrences(input, substring);
```

Относительно наиболее эффективного решения для обработки всех вхождений текстовых строк, содержащих номера задач, можно использовать метод `Regex.Matches()` из класса `System.Text.RegularExpressions.Regex`. В этом случае не нужно самостоятельно следить за текущим индексом и обновлять его. 

Пример кода с использованием `Regex.Matches()`:

```
string input = "строка, содержащая номера задач 123 и 456";
string pattern = @"номера задач"; // паттерн для поиска

foreach (Match match in Regex.Matches(input, pattern))
{
    // код для выполнения
}
```

Этот метод автоматически находит все вхождения паттерна в строке и выполняет код для каждого найденного совпадения.
если после номера задачи идет и перевод строки, то это уже не нахождение в строке. 
от начала до не-цыфра простой регуляркой.
Если все цифры начинаются с номера, то можно так

sed -r 's/#.{0.1}\d*/replacement/g' file
Похожие вопросы