Это на самом деле просто комментарий к Graimer's solution, но он был бы слишком длинным, а также недостаточно читаемым в качестве комментария, поэтому вместо этого я делаю это (дополнительным) ответом.
Чтобы повторно обернуть строку после удаления USER\
вы могли бы сделать что-то вроде этого:
$s = "Members : {member1, member2, member3, member4, member5, member6}"
$s -match '^(.*?{)(.*)(})$'
$pad = " " * $matches[1].Length
$matches[1] + ($matches[2] -replace '(.{1,20},) ', "`$1`r`n$pad") + $matches[3]
Первое регулярное выражение разбивает строку на 3 части, которые могут быть доступны через $matches
коллекции:
Name Value
---- -----
3 }
2 member1, member2, member3, member4, member5, member6
1 Members : {
0 Members : {member1, member2, member3, member4, member5, member6}
$matches[1]
является прологом, включающим в себя фигурные скобки, $matches[2]
является списком участников, а $matches[3]
является закрывающей фигурной скобкой. Теперь вам нужно только, чтобы обернуть $matches[2]
на любой длины вы хотите:
'(.*{1,20},) '
Вышесказанное означает «длинный матч не более 20 символов, за которыми следует запятая и пробел». Замените это на группу 1 st ($1
), за которой следует разрыв линии (`` `r n``) and a number of spaces that matches the length of the prologue (
$ pad`) и приклеить его обратно вместе с прологом и скользящей фигурной скобкой.
Почему бы не подавить все разрывы строк перед запуском кода? '%' является псевдонимом foreach, зачем использовать его дважды? –
Вы правы, что не было необходимо. Я не знаю, что у меня это было. – user2065960