在c#中仅替换三个中的三个倍数

时间:2017-01-09 06:12:04

标签: c# string replace

如何在C#中仅替换 3的倍数?比方说,我有字符串"000100000",我希望"000"替换为"+",但只有每个三个字符组。附加条件:应从开始更改组<,>对于"000100000",它应输出"+100+"

6 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。

(0{3}(?!0+))

这使用负前瞻来确保在一组三个0之后没有任何其他零 - 换句话说,对于任意数量的0的序列,它只与最后一个匹配3。

如果你想做一些看起来微微不同的前瞻和外观,你可以修改它。

答案 1 :(得分:0)

您可以使用Substring:

执行此操作
 string strReplace = "000100000";

//Store your string on StringBuilder to edit the string
 StringBuilder sb = new StringBuilder(); 

 sb.Append("+");
 sb.Append(strReplace.Substring(0, 3)); //Use substring, 0 is the start of index and 3 is the length as your requirement 
 sb.Append("+");
 sb.Append(strReplace.Substring(3, 3));
 sb.Append("+");
 sb.Append(strReplace.Substring(6, 3));
 sb.Append("+");

 strReplace = sb.ToString(); //Finally replace your string instance with your result

或者通过for循环,但这次而不是使用子字符串,我们使用Char数组来获取字符串中的每个字符:

        string strReplace = "000100000";
        char[] chReplace = strReplace.ToCharArray();
        StringBuilder sb = new StringBuilder();
        for (int x = 0; x <= 8; x++)
        {
            if (x == 0 || x == 3 || x == 6 || x == 9)
            {
                sb.Append("+");
                sb.Append(chReplace[x]);
            }
            else
            {
                sb.Append(chReplace[x]);
            }
        }
        sb.Append("+");
        strReplace = sb.ToString();

答案 2 :(得分:0)

我建议使用正则表达式,例如:

string source = "000100000";

// "+100+"
string result = Regex.Replace(
  source, 
  "0{3,}", 
  match => new string('0', match.Length % 3) + new string('+', match.Length / 3));

试验:

  001        -> 001
  0001       -> +1 
  000100     -> +100
  0001000    -> +1+
  00010000   -> +10+
  000100000  -> +100+ 
  0001000000 -> +1++

答案 3 :(得分:0)

好的,这些答案中有很多是针对3 '0' s的检测组。这是一个回答3个任意组的小组(以三个字符为一组读取字符串):

string GroupsOfThree(string str)
{
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i + 2 < str.Length; i += 3)
    {
        string sub = str.Substring(i, 3);
        if (sub.All(c => c == sub[0]))
            sb.Append("+");
        else
            sb.Append(sub);
    }

    return sb.ToString();
}

答案 4 :(得分:0)

您可以使用替换正则表达式。

"[0]{3}|[1]{3}"

上面的正则表达式可以在C#中使用如下:

string k = "000100000";
Regex pattern = new Regex("[0]{3}|[1]{3}");
pattern.Replace(k, "+");

答案 5 :(得分:-1)

在替换之前和解决问题之后反转字符串。

类似的东西:

string ReplaceThreeZeros(string text)
{
    var reversed = new string(text.Reverse().ToArray());
    var replaced = reversed.Replace("000","+");
    return new string(replaced.Reverse().ToArray());
}