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中的*(来自带对称密钥的DB)。
不喜欢使用Contains方法,我用多个If-elseif指定数字* 6/7。因为这些可以在6,7-9之间变化。
用我的上述方法替换每个字符 - > *使用var替换。 任何Linq方法,如果有高度赞赏。 结果:5430341234567890243
答案 0 :(得分:3)
您需要使用匹配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
答案 1 :(得分:2)
你可以使用正则表达式,但你可以不用。让我们寻求一个更简单的解决方案。 Try it online
var panmaskednumber = "543034******0243";
var count = panmaskednumber.Count(x => x == '*');
var start = panmaskednumber.IndexOf('*');
var replace = "123456789";
// output 5430341234567890243 (543034 123456789 0243)
Console.WriteLine(panmaskednumber.Remove(start) // get head
+ replace // add replace
+ panmaskednumber.Substring(start + count)); // add tail
// output 5430341234560243 (543034 123456 0243) // get head
Console.WriteLine(panmaskednumber.Remove(start)
+ replace.Remove(count) // add replace with count respect
+ panmaskednumber.Substring(start + count)); // add tail
replace = "123";
// output 543034123***0243 (543034 123*** 0243) // get head
Console.WriteLine(panmaskednumber.Remove(start)
+ replace // add replace
+ new string('*', count - replace.Length) // fill with missing *
+ panmaskednumber.Substring(start + count)); // add tail
&#34;我认为如果你拥有的唯一工具就是锤子,它很诱人,就像把它当作钉子一样对待它。&#34;
如果你也没有,请不要使用正则表达式。对于这个问题,C#.NET就足够了。 :)