首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex用预定义的数字替换变量*

Regex用预定义的数字替换变量*
EN

Stack Overflow用户
提问于 2017-04-12 12:49:38
回答 2查看 132关注 0票数 2
代码语言:javascript
复制
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的对称密钥)。

不喜欢使用包含方法,在这种方法中,我将*6/7的数目与多个If-elseif一起指定。因为它们可以在6,7-9之间变化。

使用我的上述方法,它将-> *的每个字符替换为var替换。任何Linq方法,如果有高度赞赏。结果: 5430341234567890243

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 12:54:45

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

代码语言:javascript
复制
var panmaskednumber = "543034******0243";
var replace = "123456789";
var res = Regex.Replace(panmaskednumber, @"\*+", replace);
// res => 5430341234567890243

C#演示。

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

代码语言:javascript
复制
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

请参阅另一个C#演示

票数 3
EN

Stack Overflow用户

发布于 2017-04-12 12:59:28

您可以使用Regex,但您可以实现没有。让我们寻求一个更简单的解决方案。在网上试试

代码语言:javascript
复制
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

“我想,如果你唯一的工具是锤子,那就把每件事当作钉子对待是很诱人的。”

https://en.wikipedia.org/wiki/Law_of_the_instrument

不要使用Regex,如果你没有。对于这个问题,C#.NET就足够了。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43370036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档