这里的Excel家伙偶尔会通过vba自动化powershell。
我试图解决https://stackoverflow.com/q/36538022/641067(现已关闭)并且无法通过我的基本知识库知识和googlefu来实现目标。
本质上OP提出的问题是:
我尝试了各种方法,包括
Group
Compare-Object
请参阅下面的示例 但我被第(3)部分阻碍了。我怀疑需要一个循环才能做到这一点,但我很好奇是否有直接的Powershell
方法,
期待听到专家的意见。
我尝试了什么
$a = Get-Content "c:\temp\in.txt"
$b = $a | select -unique
[regex] $a_regex = ‘(?i)(‘ + (($a |foreach {[regex]::escape($_)}) –join “|”) + ‘)’
$c = $b -match $a_regex
Compare-object –referenceobject $c -IncludeEqual $a
答案 0 :(得分:3)
使用循环测试脚本将适用于您概述的规则,看起来万无一失
$t = ('first', 'will', 'william', 'williamlong', 'unique', 'lieve', 'lieven')
$s = $t | sort-object
[String[]]$r = @()
$i = 0;
while ($i -lt $s.Count - 1) {
if ($s[$i+1].StartsWith($s[$i])) {
$r += $s[$i]
$r += $s[$i+1]
}
$i++
}
$r | Sort-Object -Unique
使用正则表达式的testcript可能会让你开始。
$content = "nomatch`nevenmatch1`nevenmatch12`nunevenmatch1`nunevenmatch12`nunevenmatch123"
$string = (($content.Split("`n") | Sort-Object -Unique) -join "`n")
$regex = [regex] '(?im)^(\w+)(\n\1\w+)+'
$matchdetails = $regex.Match($string)
while ($matchdetails.Success) {
$matchdetails.Value
$matchdetails = $matchdetails.NextMatch()
}