为什么这个RegEx.Replace失败了,即使我匹配字符串?

时间:2012-11-06 01:21:43

标签: c# .net regex

我是否了解RegEx.Replace如何在C#/ .NET中运行?我想要这个:

  

测试:字符串

成为这个:

  

测试字符串

var cleanString = Regex.Replace("Test: String", @"^[\w\*\$][\w\s\-\$]*(\(\d{1,}\)){0,1}$", "");

然而,cleanString评估为:

  

测试:字符串

我做错了什么?

编辑:我从第三方源获取正则表达式验证字符串,因此我可以使用该正则表达式验证字符串或以某种方式找出正则表达式验证字符串中的有效字符,并循环遍历无效的字符数组。这就是我选择使用正则表达式的原因,我从不使用它。

2 个答案:

答案 0 :(得分:1)

Regex.Replace不会做您想做的事情。 Regex.Replace中使用的正则表达式模式需要匹配要替换的字符串的位。

您尝试使用的字符串验证模式仅匹配有效字符串。您可以对此模式使用Regex.IsMatch来检查字符串是否有效,但它不会,也不能显示字符串中的哪些字符阻止匹配成功。

您需要使用与错误字符匹配的模式。这种情况的第一次尝试是[^\w\*\-\d\(\)\s\$]+。这将匹配验证字符串不允许的任何字符,但仍然不够好。例如,它不匹配可选括号之间的非数字字符,并且它不会强制执行一对匹配的括号。当你开始考虑字符串可能无效的所有可能方式,因为单个正则表达式模式去除无效字符将很快变得不可行。

答案 1 :(得分:0)

我会这样做:

Dictionary<string,string> whiteList = new Dictionary<string,string>();
//populate whitelist
public StringBuilder cleanString(string dirtyInput)  
{
    StringBuilder sb = new StringBuilder();    
    foreach(char in dirtyInput)    
    {  
        if(null == dirtyInput.get(char)  
        {  
             sb.append(char);  
        }
    }  
    return sb;

}  

可能有点过时因为我的Java可能会流血。