сравнение значений массива содержит строки

#powershell

#powershell

Вопрос:

У меня есть два массива строк

 $a1 = @('a123-xyz','b479-wer','cbchjk','lio_iuy')
$b1 = @('a123-xyz','b479-wer','cbc-hjk')
  

Я хочу сравнить, $a1 и $b1 какого бы элемента там не было в $b1 , я должен его получить.

Я пишу так:

 $c1 = $a1 | Where {$b1 -NotContains $_} 
  

$c1 будет содержать 'cbchjk','lio_iuy' .

Вопрос:

$al и $b1 содержат «cbchjk» и «cbc-hjk». но в $a1 значении ошибка опечатки. Я ищу вместо того, чтобы говорить, что «cbc-hjk» и «cbchjk» отличаются (технически), я хочу продолжить, автоматически исправив значение $a1 и $c1 должно иметь только «lio_iuy»

Комментарии:

1. Нечеткое сопоставление — очень широкая и сложная тема. Вам нужно предоставить гораздо больше информации о том, что вы хотите сопоставить, а также о том, что вы не хотите сопоставлять. Например, удаление дефисов и подчеркиваний из всех значений перед выполнением сравнения позволило бы получить желаемый результат для этих конкретных значений . Тот же подход не сработает, если, например, была введена ошибка в букве или цифре.

2. спасибо Ansgar за ответ. не могли бы вы поделиться некоторыми примерами кода для обоих вариантов. Это будет хорошая тема для изучения.

3. Начните с чтения о расстоянии Левенштейна . Существует несколько реализаций алгоритма, включая версию Powershell.

4. спасибо за помощь.