正则表达式过滤掉 $

本文关键字:过滤 正则表达式 | 更新日期: 2023-09-27 18:37:02

我有一个返回以下项的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*[^$]),我的正则表达式应该是什么样子的?

正则表达式过滤掉 $

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

'$$

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

'$

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

正则表达式在这里是完全不必要的。 只需使用 Include 方法查看字符串中是否有 $。

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

这里不需要正则表达式,请使用 IndexOf 在找不到时返回 -1。

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