C# Строка добавить строку после первого вхождения строки после заданной строки - PullRequest
0 голосов
/ 16 апреля 2020

Я знаю, что это кажется очень сложным, но я имею в виду, например, что у меня есть строка

This is a text string 

Я хочу найти строку (например: текст). Я хочу найти первое вхождение этой строки, которое следует за данной другой строкой (например: is), и заменой должна быть другая заданная строка (например: replace)

Таким образом, результат должен быть:

This is a textreplace string

Если текст This text is a text string, то результат должен быть This text is a textreplace string

Мне нужен метод (метод расширения приветствуется):

public static string AppendFirstOccurranceAfter(this string originalText, string after, string oldValue, string newValue)
// "This is a text string".ReplaceFirstOccurranceAfter("is", "text", "replace")

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы должны найти индекс первого слова для сопоставления, а затем, используя этот индекс, выполнить другой поиск второго слова, начиная с этого индекса, а затем вы можете вставить свой новый текст. Вы можете найти указанные индексы с помощью метода IndexOf (проверьте его перегруженность).

Вот простое решение, написанное таким образом, что (я надеюсь) читабельно и которое вы, вероятно, можете улучшить до сделай больше идиомати c:

    public static string AppendFirstOccurranceAfter(this string originalText, string after, string oldValue, string newValue) {
    var idxFirstWord = originalText.IndexOf(after);
    var idxSecondWord = originalText.IndexOf(oldValue, idxFirstWord);
    var sb = new StringBuilder();

    for (int i = 0; i < originalText.Length; i++) {
        if (i == (idxSecondWord + oldValue.Length))
            sb.Append(newValue);
        sb.Append(originalText[i]);
    }

    return sb.ToString();
}
0 голосов
/ 16 апреля 2020

Вот метод расширения:

        public static string CustomReplacement(this string str)
        {
            string find = "text"; // What you are searching for
            char afterFirstOccuranceOf = 'a'; // The character after the first occurence of which you need to find your search term.
            string replacement = "$1$2replace"; // What you will replace it with. $1 is everything before the first occurrence of 'a' and $2 is the term you searched for.

            string pattern = $"([^{afterFirstOccuranceOf}]*{afterFirstOccuranceOf}.*)({find})";

            return Regex.Replace(str, pattern, replacement);
        }

Вы можете использовать его следующим образом:


string test1 = "This is a text string".CustomReplacement();
string test2 = "This text is a text string".CustomReplacement();

В этом решении используются C# Регулярные выражения. Документация от Microsoft находится здесь: https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference

...