这是我的问题:
假设我有一个值为的第一个变量:
$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命令可以轻松完成工作?
由于
答案 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"
}
}
}