Опираясь на ответ @mjolinor, этот однострочник проходит все тесты по вашему вопросу:
($parts | ? { $_ } | % { ([string]$_).trim('/') } | ? { $_ } ) -join '/'
Если вы на самом деле не заботитесь о последнем тестовом примере (1,2,'',3,4)
и можете считать, что все входные данные являются строками, вы можете сократить это до:
($parts | ? { $_ } | % { $_.trim('/') } | ? { $_ } ) -join '/'
Обратите внимание, что у меня есть два пустых / пустых фильтра (? { $_ } )
присутствует: первый удаляет пустые или пустые строки из ввода, что исправляет ваш тестовый случай с пустой строкой ('http:/fdfdfddf','','aa/bb')
. Второе также необходимо, перехватывая входные данные , уменьшенные до пустых с помощью функции обрезки.
Если вы действительно хотите быть разборчивым в этом, вам следует добавить еще одно усечение, чтобы исключить только пробельные значения, поскольку они, вероятно, нежелательны:
($parts | ? { $_ } | % { $_.trim('/').trim() } | ? { $_ } ) -join '/'
С этим последним эти входные данные тестового примера также будут возвращать http://mysite/one/two
:
$parts = 'http://mysite','' ,'one/two' # empty
$parts = 'http://mysite',' ','one/two' # whitespace
$parts = 'http://mysite',' /','one/two' # trailing virgule
$parts = 'http://mysite','/ ','one/two' # leading virgule
$parts = 'http://mysite','/ /','one/two' # double virgule