linq字符串处理1个lambda表达式中的2个字符

时间:2012-12-21 13:46:18

标签: c# linq

我已经看到一些有趣的方法来处理Linq的字符串:

例如,要通过将X替换为X来隐藏字符串中的数字,我可以这样做:

string strNum = "Hello, my number is ... 3456c456";

string strHidden = new String(strNum.ToCharArray()
     .Select(c => (!char.IsNumber(c)) ? c : 'X').ToArray());

Console.WriteLine(strHidden);

是否有Linq方法可以执行此操作,只有当前字符为数字且以下两个字符为数字时才会替换数字?

有很多方法可以定制上面的方法,但我想知道是否有一种简单的linq方法可以一次使用多个字符。

编辑:将当前字符的要求添加为数字。

1 个答案:

答案 0 :(得分:5)

根据我的评论中的解释,您可以使用LINQ:

执行此操作
string strHidden = new String(Enumerable.Range(0, strNum.Length)
    .Select(i => 
        char.IsNumber(strNum[i]) && 
        Enumerable.Range(i+1,2).All(j => j < strNum.Length && char.IsNumber(strNum[j]))
            ? 'X'
            : strNum[i])
    .ToArray());

正则表达式替代:

var strHidden = Regex.Replace(strNum, @"\d(?=\d{2})", "X");

好多了,不是吗?