正则表达式过滤掉 $
本文关键字:过滤 正则表达式 | 更新日期: 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);
}