用另一个字符串替换字符串中的字符

时间:2013-12-05 19:49:46

标签: c# string linq

所以我想做的是如下:

字符串的示例是A4PC

我试图用“[A4]”替换任何“A”的出现,所以我会得到“4”与“[A4]”的相似之处

“[A4] [A4] PC”

我尝试对字符串进行正常的替换,但发现我得到了

“[A [A4]] PC”

string badWordAllVariants =
                restriction.Value.Replace("A", "[A4]").Replace("4", "[A4]")

因为我有两个A连续导致问题。

所以我认为它更好,而不是替换字符串我需要在每个字符的字符基础上执行它,然后再次构建一个字符串。

Linq还有这么做吗?

3 个答案:

答案 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]