RegEx - 量词{x,y}没有任何错误

yea*_*mok 6 c# regex argumentexception

我对RegEx很新 - 所以有人可以帮我弄清楚到底出了什么问题吗?

我有这个代码:

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

然而,当我的应用程序遇到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

        }
Run Code Online (Sandbox Code Playgroud)

如果将模式传递到此循环中,如何定义模式?

Mar*_*ers 6

更新:在阅读问题评论后,我认为您只需要这样:

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

旧答案:我猜你写的时候*想到的是通配符,比如那些你要在shell中输入的通配符:

*.文本

这不是*正则表达式语法的工作原理.你可能想要的是.*:

".*[~#%&*{}/<>?|\"-]+.*"
Run Code Online (Sandbox Code Playgroud)

.意思是"任何字符",而*表示"零个或多个前面的".

在字符类中[...],*它失去了它的特殊含义并成为一个文字字符,所以它不需要被转义.在角色类中不必要地逃避它不会造成任何伤害,有些人会发现它更容易阅读.