替换字符串之间的字符?

时间:2012-11-09 19:26:36

标签: c# .net-4.0

我有以下字符串:

string input = "  2  1";

2 spaces后跟2,然后2 more spaces后跟1。我想对它进行替换,但我只想用{0}替换21之间的空格,如果可能的话我不想使用RegEx?

最终结果应如下所示:

string result = "  2001";

20 340400 1 - 20-34-04-00-00001.0-0000.00

20 340400 500 - 20-34-04-00-00500.0-0000.00

20 340900 C - 20-34-09-00-0000C.0-0000.00

20 3435OG 1 1 - 20-34-35-OG-00001.0-0001.00

20 3435OG 2 10 - 20-34-35-OG-00002.0-0010.00

20 3435OG A - 20-34-35-OG-0000A.0-0000.00

20 3436AA 1 4A - 20-34-36-AA-00001.0-0004.A

20 3436AA 2 10B - 20-34-36-AA-00002.0-0010.B

20 353100 268 - 20-35-31-00-00268.0-0000.00

20G3402AI 1 401 - 20G-34-02-AI-00001.0-0004.01

20G3403AI 7 1 - 20G-34-03-AI-00007.0-0001.00

20G3416MK 1701 - 20G-34-16-MK-00000.0-0017.01

21 3410OM 148 - 21-34-10-OM-00000.0-0147.00

我注意到的一些事情是前4个部分放在一起,大部分空格和小数被删除。在大多数情况下,我没有正则表达式就取得了成功,但对某些人来说却失败了。

7 个答案:

答案 0 :(得分:2)

怎么样:

static string ReplaceSpacesWithZerosExceptLeading(string s)
{
    return s.TrimStart(' ').Replace(' ', '0').PadLeft(s.Length);
}

这将删除前导空格,然后用零替换其余的空格,然后重新开启前导空格。

编辑:没关系,这个答案已经存在......

答案 1 :(得分:1)

string input = "  2  1";
string result = string.Format("  {2}00{4}", input.Split(' ')); //Gives "  2001"

答案 2 :(得分:0)

var result = input.TrimStart().Replace(' ', '0'); // "2001"

如果前导空格很重要,那么:

var result = input.TrimStart().Replace(' ', '0').PadLeft(input.Length, ' '); 

答案 3 :(得分:0)

尝试(Input.Trim()).Replace(" ", "0");

答案 4 :(得分:0)

你真的应该使用RegEx,但你也可以尝试:

input.Replace(input.Trim(), input.Trim().Replace(" ", "0"));

显然它不是最佳的,但它应该可以解决问题。

答案 5 :(得分:0)

string txt = "  2  1";
string txt1 = txt.Substring(0, (txt.Length - txt.TrimStart().Length)) + txt.TrimStart().Replace(" ", "0");
Debug.WriteLine(txt1);

或如果数字在范围内

long num = long.Parse(txt.Replace(" ", "0"));
txt1 = num.ToString().PadLeft(txt.Length);
Debug.WriteLine(txt1);

答案 6 :(得分:0)

只是为了你可以使用Linq的乐趣:

string result = string.Format("{0}{1}{2}",
                   new string(input.Take(3).ToArray()), //get first three values
                   "00", //insert 00
                   new string(input.Skip(5).ToArray())); //get last value