正则表达式用预定义的数字

时间:2017-04-12 12:49:38

标签: c# regex linq

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

2 个答案:

答案 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

请参阅antother C# demo

答案 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;

Law of instrument

如果你也没有,请不要使用正则表达式。对于这个问题,C#.NET就足够了。 :)