6

私は正規表現に非常に慣れていないので、誰かがここで何が間違っているのかを正確に理解するのを手伝ってくれませんか?

私はこのコードを持っています:

       string regPattern = "*[~#%&*{}/<>?|\"-]+*";
       string replacement = "";
       Regex regExPattern = new Regex(regPattern);

それでも、アプリがregExPattern行に到達すると、何もエラーが発生しなかった後、ArgumentException --Quantifier{x、y}が発生します。

誰かが助けることができますか?

編集:このパターンを次のようにforeachループに渡す必要があります:

    if (paths.Contains(regPattern))
        {
            foreach (string files2 in paths)
            {
                try
                {
                    string filenameOnly = Path.GetFileName(files2);
                    string pathOnly = Path.GetDirectoryName(files2);
                    string sanitizedFileName = regExPattern.Replace(filenameOnly, replacement);
                    string sanitized = Path.Combine(pathOnly, sanitizedFileName);
                    //write to streamwriter
                    System.IO.File.Move(files2, sanitized);

                }
                catch (Exception ex)
                {
                    //write to streamwriter

                }
            }
        } 
        else
        { 
        //write to streamwriter

        }

このループに渡される場合、パターンを定義するにはどうすればよいですか?

4

5 に答える 5

7

更新:質問へのコメントを読んだ後、私はあなたが単にこれが欲しいと思います:

s = Regex.Replace(s, "[~#%&*{}/<>?|\"-]+", "");

古い答え:あなた*が書くとき、あなたはシェルで入力するようなワイルドカードを考えていると思います:

*。TXT

これは*、正規表現構文で機能する方法ではありません。代わりにおそらく必要なのは.*

".*[~#%&*{}/<>?|\"-]+.*"

「任意の.文字」を*意味し、「前の0個以上」を意味します。

文字クラス内では[...]*はその特別な意味を失い、リテラル文字になるため、エスケープする必要はありません。キャラクタークラス内で不必要にエスケープしても害はなく、読みやすいと感じる人もいます。

于 2010-06-28T19:41:55.850 に答える
2

これ*は、「0回以上」を意味する数量詞です(と同じ{0,})。次のような円記号を使用してエスケープする必要があります。\*

于 2010-06-28T19:43:01.667 に答える
0

Regex.Replaceを実行しているため、これらの1文字の一致を空の文字列に置き換えます。

        string pattern = "[~#%&*{}/()<>?|\"\\\\-^[\\]]";

        string input = @"(*&af%\#$}afd]a#f%hjg{d(^(^[RF*()^FR(7r5";

        string output = Regex.Replace(input, pattern, String.Empty);
于 2010-06-28T20:01:07.393 に答える
0

.前に追加*

例えばstring regPattern = ".*[~#%&*{}/<>?|\"-]+.*";

于 2014-06-03T13:46:07.310 に答える
0

ワイルドカード文字*は、ここでは単独では正常に機能しません。これを試してみました。正常に機能させるには、これが機能するため、.*に完全に追加する必要があり.*ます。

于 2021-04-09T15:02:57.890 に答える