如何在C#中将15300504579PRI03转换为15,3,005,04579,PRI,03

时间:2015-06-27 16:08:23

标签: c# regex

如何在C#中将15300504579PRI03转换为15,3,005,04579,PRI,03。我必须为每一行执行此操作,如下面的文本文件

所示
15300504579PRI03
15300504841PRI03
15300504843PRI03
15300504847PRI03

4 个答案:

答案 0 :(得分:2)

这是一个不依赖正则表达式的简单解决方案:

public string Convert(string input)
{
    var list = new List<char>(input.ToCharArray());
    list.Insert(2, ',');
    list.Insert(4, ',');
    list.Insert(8, ',');
    list.Insert(14, ',');
    list.Insert(18, ',');
    return new string(list.ToArray());
}

以及如何使用它:

var input = "15300504579PRI03";
var replaced = Convert(input); //replaced will contain: 15,3,005,04579,PRI,03

答案 1 :(得分:1)

您可以使用捕获组捕获所需的所有内容,然后在每个捕获的内容后创建一个连接,的新字符串。

例如,您可以使用此正则表达式:

(.{2})(.)(.{3})(.{5})(.{3})(.{2})

<强> Working demo

使用替换字符串:

$1,$2,$3,$4,$5,$6

代码:

var pattern = @"(.{2})(.)(.{3})(.{5})(.{3})(.{2})";
var replaced = Regex.Replace(text, pattern, "$1,$2,$3,$4,$5,$6"); 

enter image description here

答案 2 :(得分:0)

将正则表达式与组配合使用。然后解析第一个数字。您还可以使用带有正则表达式或子字符串的其他组来解析带前缀的数字。 (2num)(1num)(3num)(5num)(字母)(数)

// URL that generated this code:
// http://txt2re.com/index-csharp.php3?s=15300504579PRI03%20&1&4&5

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      string txt="15300504579PRI03 ";

      string re1="(\\d+)";  // Integer Number 1
      string re2="((?:[a-z][a-z]+))";   // Word 1
      string re3="(\\d+)";  // Integer Number 2

      Regex r = new Regex(re1+re2+re3,RegexOptions.IgnoreCase|RegexOptions.Singleline);
      Match m = r.Match(txt);
      if (m.Success)
      {
            String int1=m.Groups[1].ToString();
            String word1=m.Groups[2].ToString();
            String int2=m.Groups[3].ToString();
            Console.Write("("+int1.ToString()+")"+"("+word1.ToString()+")"+"("+int2.ToString()+")"+"\n");
      }
      Console.ReadLine();
    }
  }
}

//-----
// Paste the code into a new Console Application
//-----

答案 3 :(得分:0)

又一种方法......

using System;

public class Program
{

    public static void Main()
    {
        string input = "15300504579PRI03";
        string output = Convert(input); 
        Console.WriteLine(input);
        Console.WriteLine(output);
    }

    static public string Convert(string input)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder(input);
        int[] commasAt = {2, 3, 6, 11, 14};
        for(int i = commasAt.Length - 1; i >= 0; i--)   
        {
            sb.Insert(commasAt[i], ',');
        }
        return sb.ToString();
    }

}