正则表达式过滤$

时间:2015-01-09 20:22:13

标签: c# regex

我有一个powershell脚本,它返回以下项目:

migration test 
TECHS-NT$
Administrator 
krbtgt
SDI$

现在,我想要消除包含$的项目,并将没有$的项目提供给列表。像,

    List<string> powershellResults = new List<string>();
    foreach (string str in Powershell.Create().AddScript(PS Script))
    {
        if (Regex.IsMatch(str, @"(\w*[^$])"))
        {
            powershellResults.Add(str);
       }
    }

    foreach (string str in powershellResults)
    {
        Console.WriteLine(str);
    }

但是,(\ w * [^ $])匹配每个项目,而不是过滤掉SDI $和TECHS-NT $项目。我的正则表达式应该是什么样的,如果不是(\ w * [^ $])?

3 个答案:

答案 0 :(得分:2)

你的正则表达式看起来有点奇怪。如果您想将结尾行与美元符号匹配,请尝试以下操作:

\$$

请记住,$表示正则表达式中的行/字符串,因此要使用它,需要对其进行转义。如果您希望匹配任何包含美元符号的行,只需:

\$

但是,如果我们能说服你不要使用正则表达式,那么LINQ会更容易。简单地:

var res = from line in Powershell.Create().AddScript( PS Script )
          where !line.EndsWith( "$" )
          select line;

或者:

var res = Powershell.Create().AddScript( PS Script ).Where( q => !q.EndsWith( "$" ) );

EndsWith更改为Contains以查找任何美元符号,而不仅仅是最终的符号。

答案 1 :(得分:1)

这里完全不需要正则表达式。只需使用Contains方法查看字符串中是否包含$。

foreach (string str in Powershell.Create().AddScript(PS Script))
{
    if (!str.Contains("$"))
    {
        powershellResults.Add(str);
   }
}

答案 2 :(得分:0)

此处不需要正则表达式,使用IndexOf,如果找不到则返回-1。

  if (str.IndexOf("$")==-1)
   {
        powershellResults.Add(str);
   }