0

我是否了解 RegEx.Replace 在 C#/.NET 中的工作原理?我要这个:

测试:字符串

变成这样:

测试字符串

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

然而它 cleanString 评估为:

测试:字符串

我究竟做错了什么?

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

4

2 回答 2

1

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

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

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

于 2012-11-06T01:44:15.613 回答
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 可能已经流血了。

于 2012-11-06T01:31:29.593 回答