日常的字符串替换函数Repace()可以直接替换,但是有时又需要排除特定的字符而不替换。如需要替换a,但不替换abc,这时使用Replace函数会误替换。
临时写了一个可以使用的:
//替换某个字符,但不替换包含该字符的特定字符
//如,替换a但不替换abc
//specialStr 为自定义的特殊字符集
List<string> specialStr = new List<string>()
{"True", "False"};
public static string ReplaceVarWithoutOperators(string originalStr, string oldStr, string newStr)
{
StringBuilder replaceStr = new StringBuilder();
replaceStr.Append(originalStr);
List<string> unReplaceString = new List<string>();
foreach (var key in specialStr)
{
if (key.IndexOf(oldStr, StringComparison.OrdinalIgnoreCase) > -1)
{
unReplaceString.Add(key);
}
}
var regex = new Regex("(?i)" + oldStr);
var matches = regex.Matches(originalStr);
for (int i = matches.Count -1; i>=0; i--)
{
var matchIndex = matches[i].Index;
bool isReplace = true;
foreach (var item in unReplaceString)
{
if ( (matchIndex+ item.Length) < originalStr.Length &&
originalStr.Substring(matchIndex,item.Length).ToLower() == item.ToLower())
{
isReplace = false;
}
}
if (isReplace)
replaceStr = replaceStr.Replace(oldStr, newStr, matchIndex, 1);
}
return replaceStr.ToString();
}
只是简单实现了功能,但是不知道是不是有更好的解决方法,存放在此以备留用。