Это мой код:PowerShell использовать регулярное выражение для разбиения строки
[regex]::split("1,2 3", '(,|\s)+')
То, что я хочу, это массив с тремя элементами 1, 2, 3
, однако, что я получил это массив с пятью элементами.
PS C:\Users\a> [regex]::split("1,2 3", '(,|\s)+').Length
5
PS C:\Users\a>
Как получить то, что я хочу?
Update
Добавить фактический split
результат вместо length
.
PS E:\> [regex]::split("1,2 3", '(,|\s)+')
1
,
2
3
PS E:\> [regex]::split("1,2 3", '(,|\s)+').length
5
PS E:\> [regex]::split("1,2 3", '[,\s]+')
1
2
3
PS E:\> [regex]::split("1,2 3", '[,\s]+').length
3
PS E:\>
Update
Спасибо @ ответ Мэтта и он указывает мне на правую сторону. От help about_split
в документе указывается, что:
По умолчанию разделитель опускается из результатов. Чтобы сохранить все или часть разделителя, заключите в круглые скобки ту часть, которую вы хотите сохранить. .
Ниже приведены некоторые из моих испытаний.
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "/(:)/"
Lastname
:
FirstName
:
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "/:/"
Lastname
FirstName
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "(/:/)"
Lastname
/:/
FirstName
/:/
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "/:(/)"
Lastname
/
FirstName
/
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "(/):(/)"
Lastname
/
/
FirstName
/
/
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "(/)(:)(/)"
Lastname
/
:
/
FirstName
/
:
/
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '/(:)/')
Lastname
:
FirstName
:
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '/:/')
Lastname
FirstName
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '/:(/)')
Lastname
/
FirstName
/
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '(/):(/)')
Lastname
/
/
FirstName
/
/
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '(/)(:)(/)')
Lastname
/
:
/
FirstName
/
:
/
Address
PS E:\tutorial>
Я не знаю Powershell, но на многих языках, используя группу в регулярном выражении, означает, что разделители попадут в список (было бы интересно увидеть содержимое списка). Работает ли '[, \ s] +'? – Biffen
Используйте '' '[regex] :: split (" 1,2 3 ",", | \ s + ")' ''. – Phylogenesis
@Phylogenesis Это изменяет значение регулярного выражения, однако, из одной или нескольких запятых или пробелов в запятую или одно или несколько пробелов. – Biffen