C# String 在给定字符串后第一次出现某个字符串后追加一些字符串
C# String append some string ater first occurance of a string after a given string
我知道这似乎很复杂,但我的意思是例如我有一个字符串
This is a text string
我想搜索一个字符串(例如:文本)。我想找到这个字符串在给定的另一个字符串之后的第一次出现(例如:是)并且替换应该是给定的另一个字符串(例如: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")
这里是扩展方法:
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 = "replace"; // What you will replace it with. is everything before the first occurrence of 'a' and 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
您必须找到要匹配的第一个单词的索引,然后使用该索引再次搜索从该索引开始的第二个单词,然后您可以插入新文本。您可以使用 IndexOf method 找到所述索引(检查它的重载)。
这是一个简单的解决方案,其编写方式(我希望)是可读的,并且您可以改进以使其更加地道:
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();
}
我知道这似乎很复杂,但我的意思是例如我有一个字符串
This is a text string
我想搜索一个字符串(例如:文本)。我想找到这个字符串在给定的另一个字符串之后的第一次出现(例如:是)并且替换应该是给定的另一个字符串(例如: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")
这里是扩展方法:
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 = "replace"; // What you will replace it with. is everything before the first occurrence of 'a' and 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
您必须找到要匹配的第一个单词的索引,然后使用该索引再次搜索从该索引开始的第二个单词,然后您可以插入新文本。您可以使用 IndexOf method 找到所述索引(检查它的重载)。
这是一个简单的解决方案,其编写方式(我希望)是可读的,并且您可以改进以使其更加地道:
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();
}