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

C# 用另一个字符串替换字符串中的字符,c#,string,linq,C#,String,Linq,所以我想做的是: 字符串的示例是A4PC 例如,我试图用[A4]替换任何发生的A,因此我将得到与[A4]类似的任何发生的4 [A4][A4]个人电脑 我试着在绳子上做一个正常的替换,但发现我得到了 [A[A4]]个人电脑 string badWordAllVariants = restriction.Value.Replace("A", "[A4]").Replace("4", "[A4]") 因为我连续得了两个A导致了一个问题 因此,我认为它比替换字符串更好,

所以我想做的是:

字符串的示例是A4PC

例如,我试图用[A4]替换任何发生的A,因此我将得到与[A4]类似的任何发生的4

[A4][A4]个人电脑

我试着在绳子上做一个正常的替换,但发现我得到了

[A[A4]]个人电脑

string badWordAllVariants =
                restriction.Value.Replace("A", "[A4]").Replace("4", "[A4]")
因为我连续得了两个A导致了一个问题

因此,我认为它比替换字符串更好,我需要在每个字符的基础上进行替换,然后再次构建一个字符串


Linq中是否有这样的功能?

这里不需要任何Linq-工作正常:

string input = "AAPC";
string result = input.Replace("A", "[A4]"); // "[A4][A4]PC"
更新:对于您的更新要求,我建议使用


在这里,您不需要任何LINQ-工作正常:

string input = "AAPC";
string result = input.Replace("A", "[A4]"); // "[A4][A4]PC"
更新:对于您的更新要求,我建议使用


这对我来说很有效:

        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循环。希望这有帮助


顺便说一下,您希望在这里使用字符串生成器,而不是字符串,因为字符串是静态的,这意味着每次循环时都会分配空间。不好

这对我来说很有效:

        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循环。希望这有帮助


顺便说一下,您希望在这里使用字符串生成器,而不是字符串,因为字符串是静态的,这意味着每次循环时都会分配空间。不好

我认为这应该能奏效

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();
});

它将替换[A4]中尚未替换的A和4。我认为这应该可以解决问题

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();
});

它将替换[A4]中尚未替换的A和4。

看起来您的替换正在运行不止一次。替换本身工作正常。我用AAPC测试了一个正常的替换,我得到了[A4][A4]PC。。。可能是你做了什么导致了这种行为?对不起,是的,我现在正在添加评论!看起来您的替换正在运行多次。替换本身工作正常。我用AAPC测试了一个正常的替换,我得到了[A4][A4]PC。。。可能是你做了什么导致了这种行为?对不起,是的,我现在正在添加评论!啊哇好的,看起来不错,所以我可以在我的字符串中有无限数量的字符,我可以通过添加a | 4 | 5等来替换[A4]?啊哇好的,看起来不错,所以我可以在我的字符串中有无限数量的字符,我可以通过添加a | 4 | 5等来替换[A4]?