2013-09-20 3 views
1

Вот моя проблема:выбрать-нить любой строки, которая соответствует содержанию другой строки

Скажет, у меня есть первый переменный со значением:

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

и другой переменным:

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

Единственное слово, которое присутствует в обеих строках, это слово fox.

Дело в том, что у меня есть набор из 2 массивов, содержащих разные строки. Я хотел бы знать, какие слова присутствуют в обоих сборниках, учитывая, что так же, как в моем примере выше, то же слово может соответствовать разные строки, так что я не могу просто запустить

$a | sls $b 

потому, что не будет работать Мне нужно использовать regexp здесь, но я не знаю, какое регулярное выражение использовать в этом контексте, учитывая, что каждая строка из 2 массивов уникальна, и любое из слов в любой строке из массива $ a может быть в массиве $ b ,

Прежде чем попытаться разделить каждую строку с использованием символа пробела между словами, а затем сравнить каждый $ split по отдельности со строкой из другого массива, мне было интересно, есть ли удобное выражение регулярного выражения или какая-либо команда select-string, которая может легко справиться с этой задачей?

Благодаря

ответ

2

В соответствии с @ MDMoore313 вам нужны некоторые замены, чтобы удалить пунктуация т.е. $_.replace('.','')

Дайте этому попытку:

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

$a и $b являются массив строк со словами separed пробелами ,

+0

+1, я никогда не использовал объект сравнения, однако он не будет работать без удаления знаков препинания от '$ b'. – MDMoore313

+0

@ MDMoore313 да, хорошо пункт! Добавьте один способ удалить его ... перед сравнением. –

+0

Это не плохо, я сближаюсь с этим! Теперь мне нужно только знать, какие линии соответствуют. Я уже знаю, что одни и те же строки будут отображаться на выходе несколько раз, так как мы в основном разделяем слова с использованием символа пробела, но потом снова уникальность get-unique может просто выполнить задание позже! Благодаря! – Bluz

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.)

Вам все равно придется сравнивать каждую строку в массиве.

+1

Они используют powershell. –

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" 
     } 
    } 
} 
+0

O.P. talk about string array [string []], а не только [string] –

Смежные вопросы