我想替换以下字符串:
'DRCI',1,'P','CALLIN_DATE,DRIV_EMPL_CODE'
和:
'DRCI','1','P','CALLIN_DATE,DRIV_EMPL_CODE'
所以我想用单引号包裹任何数字。
最简单的方法是什么?
您可以为此使用"(\\d+)"
和"'$1'"
表达式:
var s = Regex.Replace(
"'DRCI',1,'P','CALLIN_DATE,DRIV_EMPL_CODE'"
, "(\\d+)"
, "'$1'");
Console.WriteLine(s);
(\\d+)
匹配一个非空的数字序列,并使其成为捕获组;'$1'
将该捕获组的内容用单引号括起来。
编辑:(受Servy的评论启发)要获得更强大的解决方案,请在表达式中使用前瞻和后视:
// Make sure that the digits are surrounded by commas
"(?<=(?:^|,)\\s*)(\\d+)(?=\\s*($|,))"
如果您想用引号将字符串中的所有数字括起来,您可以尝试这样的操作:
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'