x == '*')); v-6ren">
gpt4 book ai didi

c# - 正则表达式 用预定义的数字替换可变数量的 ******

转载 作者:行者123 更新时间:2023-12-03 23:01:24 27 4
gpt4 key购买 nike

var panmaskednumber = "543034******0243"; Console.WriteLine(panmaskednumber.Count(x => x == '*'));
var pattern = "\\*";
var replace = "123456789";
Regex reg = new Regex(pattern);
var newnumber = reg.Replace(panmaskednumber, replace,panmaskednumber.Count(x => x == '*'));
Console.WriteLine(newnumber);

我正在尝试替换 var panmaskednumber 中的 *(来自带有对称 key 的数据库)。

不喜欢使用 Contains 方法,在该方法中我用多个 If-elseif 指定 * 6/7 的数量。因为这些值可能在 6,7-9 之间变化。

通过我的上述方法,它将 -> * 的每个字符替换为 var 替换。任何 Linq 方法(如果有的话)都会受到高度赞赏。结果:5430341234567890243

最佳答案

您需要使用 \*+ 模式来匹配 1 个或多个星号符号:

var panmaskednumber = "543034******0243";
var replace = "123456789";
var res = Regex.Replace(panmaskednumber, @"\*+", replace);
// res => 5430341234567890243

查看 C# demo.

如果要替换的星号数量取决于replace长度,您可以将匹配值传递给匹配评估器并在那里执行必要的操作:

var panmaskednumber = "543034*****0243";
var replace = "123";

var res = Regex.Replace(panmaskednumber, @"\*+", m =>
m.Value.Length <= replace.Length ?
replace.Substring(0, m.Value.Length) :
$"{replace}{m.Value.Substring(replace.Length)}"
);
Console.Write(res);
// "543034***0243" / "123456789" -> 543034 123 0243
// "543034*****0243" / "123" -> 543034 123** 0243

参见 antother C# demo

关于c# - 正则表达式 用预定义的数字替换可变数量的 ******,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43370036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com