正则表达式过滤掉 $

Regex to filter out $

我有一个 powershell 脚本 returns 以下项目:

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*[^$]) ?

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

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

此处不需要正则表达式,未找到时使用 IndexOf,returns -1。

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

您的正则表达式看起来有点奇怪。如果要将行 ending 与美元符号匹配,请尝试这样的操作:

$$

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

$

不过,如果我们可以说服您不要为此使用正则表达式,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 以查找任何美元符号,而不仅仅是末尾的美元符号。