replace:用单引号将任意数字括起来

本文关键字:数字 起来 任意 单引号 replace | 更新日期: 2023-09-27 18:27:17

我想替换以下字符串:

'DRCI',1,'p','call_DATE,DRIV_emp_CODE'

带有:

'DRCI','1','p','call_DATE,DRIV_EMPL_CODE'

所以我想用单引号括住任何数字。

最简单的方法是什么?

replace:用单引号将任意数字括起来

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

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

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

在ideone上演示。

编辑:(灵感来自Servy的评论)要获得更健壮的解决方案,请在表达式中使用lookahead和lookbacking:

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

ideone上的替代演示。

如果你想用引号将所有数字括在字符串中,你可以尝试这样的方法:

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);
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'