这个正则表达式的作用是什么?

时间:2010-03-31 08:04:04

标签: c# .net

我正在修复错误,在那里我找到了这个表达式: -

 directoryPath = Regex.Replace(directoryPath, "[^\\w\\.@-]", "");

但由于表达式的结果,目录路径中的所有高ascii字符都搞砸了,我不擅长正则表达式并且不知道它但是现在我必须解决这个问题。

有人可以解释一下这个正则表达式的作用吗?

3 个答案:

答案 0 :(得分:3)

它取代了任何 NOT

  1. word character
  2. .(点)或
  3. @
  4. -(破折号)

    没有

  5. INPUT

        var directoryPath = @"C.@-(:\abc123/\def.foo";
    

    输出

        C.@-abc123def.foo
    

    修改后的代码替换为space和相应的输出

        var directoryPath = @"  @.-abcd efghi(^-^)/\:jklmNO@.-PQRSTUVW   XYZ0123456789@.-";
    
        Console.WriteLine(directoryPath);
    
       //note change here
       //second argument to Replace function is chanted from "" to " "
    
        directoryPath = Regex.Replace(directoryPath, "[^\\w\\.@-]", " ");
    
        Console.WriteLine(directoryPath);
    

    输出:

      @.-abcd efghi(^-^)/\:jklmNO@.-PQRSTUVW   XYZ0123456789@.-
      @.-abcd efghi  -     jklmNO@.-PQRSTUVW   XYZ0123456789@.-
    

答案 1 :(得分:1)

您似乎遇到了编码问题。例如,Regex在将字符串真正存储为UTF-8时可能会将您的字符串视为ASCII。

答案 2 :(得分:0)

它似乎是从directoryPath删除第一个不是单词字符(数字,字母,下划线),句点,@符号或连字符的字符。

我刚刚使用C:\Scratch\Filename.txt进行了尝试,它留给我CScratchFilename.txt