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

时间:2010-06-28 19:40:43

标签: c# regex argumentexception

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

我有这段代码:

       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

        }

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

5 个答案:

答案 0 :(得分:6)

更新:在阅读了问题的评论后,我认为你只想这样:

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

旧回答:我想当你写*时,你正在考虑通配符,例如你要在shell中输入的那些:

* .txt的

这不是*在正则表达式语法中的工作方式。您可能需要的是.*

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

.表示“任何字符”,*表示“之前为零或更多”。

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

答案 1 :(得分:1)

*是一个量词,意思是“零次或多次”(与{0,}相同)。你必须使用这样的反斜杠来逃避它:\*

答案 2 :(得分:0)

因为您正在使用Regex.Replace来替换任何这些单字符匹配的空字符串:

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

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

        string output = Regex.Replace(input, pattern, String.Empty);

答案 3 :(得分:0)

.

之前添加*

e.g。 string regPattern = ".*[~#%&*{}/<>?|\"-]+.*";

答案 4 :(得分:0)

通配符 * 单独在这里不能正常工作我尝试过并使其正常工作,我们需要在 . 之前添加一个 * 并且完全像 .* 这应该工作。