0

C#/.NET で RegEx.Replace がどのように機能するかを理解していますか? これ欲しい:

テスト: 文字列

これになるには:

テスト文字列

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\$]+。これは、検証文字列で許可されていない文字と一致しますが、それでも十分ではありません。たとえば、オプションの括弧の間の数字以外の文字とは一致しません。また、一致する括弧の1つのペアは強制されません。無効な文字を取り除く単一の正規表現パターンはすぐに機能しなくなるため、文字列が無効になる可能性のあるすべての方法を検討し始めると、

于 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 に答える