所以我想做的是如下:
字符串的示例是A4PC
我试图用“[A4]”替换任何“A”的出现,所以我会得到“4”与“[A4]”的相似之处
“[A4] [A4] PC”
我尝试对字符串进行正常的替换,但发现我得到了
“[A [A4]] PC”
string badWordAllVariants =
restriction.Value.Replace("A", "[A4]").Replace("4", "[A4]")
因为我有两个A连续导致问题。
所以我认为它更好,而不是替换字符串我需要在每个字符的字符基础上执行它,然后再次构建一个字符串。
Linq还有这么做吗?
答案 0 :(得分:5)
这里你不需要任何LINQ - String.Replace可以正常工作:
string input = "AAPC";
string result = input.Replace("A", "[A4]"); // "[A4][A4]PC"
更新:对于您的更新要求,我建议您使用regular expression replace
string input = "A4PC";
var result = Regex.Replace(input, "A|4", "[A4]"); // "[A4][A4]PC"
答案 1 :(得分:0)
这对我很有用:
string x = "AAPC";
string replace = x.Replace("A", "[A4]");
修改强>
根据更新后的问题,问题是第二次更换。为了替换多个字符串,您需要按顺序执行此操作:
var original = "AAPC";
// add arbitrary room to allow for more new characters
StringBuilder resultString = new StringBuilder(original.Length + 10);
foreach (char currentChar in original.ToCharArray())
{
if (currentChar == 'A') resultString.Append("[A4]");
else if (currentChar == '4') resultString.Append("[A4]");
else resultString.Append(currentChar);
}
string result = resultString.ToString();
你可以使用你想要的任何替换来运行这个例程(在这种情况下,字母'A'和'4'它应该工作。如果你想要替换字符串,代码将在结构上相似,但你会需要“向前看”并且可能使用for循环。希望这有帮助!
顺便说一下 - 你想在这里使用字符串构建器而不是字符串,因为字符串是静态的,这意味着每次循环时都会分配空间。 (不好!)
答案 2 :(得分:0)
我认为这应该可以解决问题
string str = "AA4PC";
string result = Regex.Replace(str, @"(?<Before>[^A4]?)(?<Value>A|4)(?<After>[^A4]?)", (m) =>
{
string before = m.Groups["Before"].Value;
string after = m.Groups["After"].Value;
string value = m.Groups["Value"].Value;
if (before != "[" || after != "]")
{
return "[A4]";
}
return m.ToString();
});
它将替换A
尚未替换的4
和[A4]
。