1

这是我的问题:

假设我有一个值为 的第一个变量:

$a = "The quick brown fox jumps over the lazy dog."

和另一个变量:

$b = "This morning a hunter killed a fox."

两个字符串中唯一出现的单词是单词 fox。

问题是,我有 2 个数组的集合,它们都包含不同的字符串。我想知道两个集合中都有哪些单词,就像我上面的例子一样,同一个单词可以匹配不同的字符串,所以我不能简单地运行

$a | sls $b

因为这不起作用,因为我需要在这里使用正则表达式,但我不知道在这种情况下使用什么正则表达式,因为 2 个数组中的每一行都是唯一的,并且数组中任何行中的任何单词 $ a 可以在数组 $b 中。

在我尝试使用单词之间的空格字符拆分每个字符串,然后将每个 $split 单独与另一个数组中的字符串进行比较之前,我想知道是否有一个方便的正则表达式或一些 select-string 命令可以完成这项工作容易地 ?

谢谢

4

3 回答 3

2

根据@MDMoore313,您需要一些替换来删除标点符号,即$_.replace('.','')

试试这个:

 compare-object ( $a | % { $_ -split '\s+' } )  ( $b | % { $_ -split '\s+' } ) -IncludeEqual -ExcludeDifferent

$a并且$b是由空格分隔的单词的字符串数组。

于 2013-09-20T14:30:50.893 回答
0

您可以使用正则表达式创建第二个正则表达式来进行搜索。例如:

var $a = "The quick brown fox jumps over the lazy dog.";
var $b = "This morning a hunter killed a fox.";

var r2 = new RegExp($a.replace(/\s/g,"|"), "g");
$b.match(r2);

产量 [“狐狸”]。(我意识到您可能正在使用 PHP——上面是 javascript。)

您仍然需要比较数组中的每个字符串。

于 2013-09-20T14:32:08.907 回答
0

这就是我想出的。请注意,您可能希望实现更强大的逻辑来删除标点符号。

$a = "The quick brown fox jumps over the lazy dog."

$b = "This morning a hunter killed a fox."

$a = $a.Remove($a.IndexOf("."),1)
$b = $b.Remove($b.IndexOf("."),1)

$c = $A.Split(" ")
$d = $B.Split(" ")

$c | foreach{
    $e = $_ 
    $d | foreach{ 
        $f = $_
        if($e -eq $f){
            Write-Host "$e`n"
        }
    }
}
于 2013-09-20T14:34:50.543 回答