select-string任何匹配其他字符串内容的字符串

时间:2013-09-20 14:18:42

标签: regex string powershell expression

这是我的问题:

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

$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命令可以轻松完成工作?

由于

3 个答案:

答案 0 :(得分:2)

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

尝试一下:

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

$a$b是字符串数组,其中的单词由空格分隔。

答案 1 :(得分: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。)

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

答案 2 :(得分: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"
        }
    }
}