如何使用regex或linq替换c#中的特定字符串

时间:2016-11-15 06:30:11

标签: c# linq

我有一个字符串,我需要替换一个特定的字符串,我的字符串如下

string s = @"-Username ABC **-Password XYZ** -Address MNO";
string[] s1 = s.Split('-');
var newList = s1.Where(s2 =>s2.Contains("Password"));

我需要将字符串-Password XYZ替换为-Password ****,有人可以帮助我

2 个答案:

答案 0 :(得分:2)

测试

    [TestCase("-Username ABC -Password XYZ -Address MNO", "-Username ABC -Password *** -Address MNO")]
    [TestCase("-Username ABC -Password XYZ", "-Username ABC -Password ***")]
    public void Test(string toTest, string expected ) 
    {
        Assert.AreEqual(expected, DestroyPassword(toTest));
    }

代码

    public static string DestroyPassword(string str )
    {
          var r = new Regex("-Password .*?($| )");//? in .net means not greedy
          return r.Replace(str, "-Password ***$1");
    }

编辑:

谨慎提示

这不会屏蔽带有空格的密码。如果您知道-Address始终是下一个令牌,那么这样的事情会更好:

    public static string DestroyPassword(string str )
    {
        var r = new Regex("-Password .*?($| -Address)");//? in .net means not greedy
        return r.Replace(str, "-Password ***$1");
    }

但是当密码包含' -Address'

时,该事件不能很好地处理

答案 1 :(得分:1)

您可以使用Regex.Replace(输入,替换)。函数将替换正则表达式找到的所有值。

string input = @"-Username ABC **-Password XYZ** -Address MNO";
string pattern = "(-Password )(\S+)";
string replacement = "$1****";
Regex regex = new Regex(pattern);
string result = regex.Replace(input, replacement);