我试图从一个文本框中输出一系列名称,并将过滤后的列表复制到另一个文本框中。我遇到的问题是,当我使用add_click按钮时,它只能在几个条件下工作。如果我有要在列表中列出的名称(列表的前面或末尾),则没有结果添加到目标文本框中。如果我正在添加一个应该被过滤掉的项目(假设偶然添加到一个好的名单列表中,那么即使好的名字也会被清空),它也会将目标框空白掉。因此,如果我有5个要复制的项目和一个应该过滤掉的项目,则整个目标框将被清空。当我从文本框列表中删除过滤掉的项目时,目标框中将填充这些名称。这些是我正在过滤的前缀。
$objOutputBox.Text = $logOutputBox.text |?{$_ -notmatch "etc$|^mint|kssc*|mmm|charl"}
我知道如何安排这个,以便过滤掉不需要的机器并添加所需的机器?现在它只有在我添加的每个名称都没有过滤掉的预修复或后期修复时才有效。我的理由是试图让它继续工作,并且在点击按钮时添加所需名称时将删除过滤器名称。任何帮助表示赞赏。
答案 0 :(得分:1)
我不确定我是否理解这一点。这是很多文字而不是很多样本。您现在应该考虑以及将来的参考。 “图片”(样本)胜过千言万语。 :-)你要过滤的名称是否按换行符,空格,字符分割?我似乎无法在你的文字中找到它。
为了帮助您入门,Text
属性是一个带有换行符的string
- 对象。 Where-object
(?
)通过将当前对象与规则匹配来工作。现在,由于Text
是一个string
- 对象,它将要经过(它通过了你的测试),否则它都不会通过。要解决此问题,您可以尝试将字符串拆分为数组,具体取决于您在文本框中拆分名称的方式。顺便说一句,当你使用正则表达式进行匹配时,你应该使用单引号,而不是因为特殊字符而使用双引号。
#Sample with list seperated by linebreaks
PS > $listseperatedbylinebreaks = @"
this
is
my
charl
list
"@
PS > $listseperatedbylinebreaks.Split("`n") | ? { $_ -notmatch "etc$|^mint|kssc*|mmm|charl"}
this
is
my
list
#Sample with list seperated by linebreaks and spaces
PS > $listseperatedbylinebreaksandspaces = @"
this is
my list sdsadetc
"@
PS > $listseperatedbylinebreaksandspaces.Split("`n ", [System.StringSplitOptions]::RemoveEmptyEntries) | ? { $_ -notmatch "etc$|^mint|kssc*|mmm|charl"}
this
is
my
list
我希望这能让你知道如何解决它。如果没有,请提供更多样本(例如输入文本框内容),以便我能更好地理解它。