replace:用单引号包围任何数字

时间:2013-08-12 15:31:36

标签: c# regex string

我想替换以下字符串:

  

'DRCI',1,'P','CALLIN_DATE,DRIV_EMPL_CODE'

使用:

  

'DRCI', '1', 'P', 'CALLIN_DATE,DRIV_EMPL_CODE'

所以我想用单引号包装任何数字。

最简单的方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用"(\\d+)""'$1'"表达式:

var s = Regex.Replace(
    "'DRCI',1,'P','CALLIN_DATE,DRIV_EMPL_CODE'"
,   "(\\d+)"
,   "'$1'");
Console.WriteLine(s);

(\\d+)匹配非空数字序列,并使其成为捕获组; '$1'用单引号将该捕获组的内容包装起来。

Demo on ideone.

编辑(受Servycomment启发)对于更强大的解决方案,请在表达式中使用前瞻和后瞻:

// Make sure that the digits are surrounded by commas
"(?<=(?:^|,)\\s*)(\\d+)(?=\\s*($|,))"

Alternative demo on ideone.

答案 1 :(得分:0)

如果要将所有数字括在带引号的字符串中,您可以尝试这样的事情:

string x = "'DRCI',1,'P','CALLIN_DATE,DRIV_EMPL_CODE'";
string[] y = x.Split(",".ToCharArray());
for (int i = 0; i < y.Length; i++) {
    if (Information.IsNumeric(y[i]))
        y[i] = "'" + y[i] + "'";
}
x = string.Join(",", y);

答案 2 :(得分:0)

var input = "8,'DRCI',1,'P','CALLIN_DATE,55,DRIV_EMPL_2013CODE'";
var output = Regex.Replace(input, @"(^|,)(\d+)($|,)", "$1'$2'$3");

输出:

'8','DRCI','1','P','CALLIN_DATE,'55',DRIV_EMPL_2013CODE'