我有一个字符串simliar:
c:/folder name/somewhere/application.exe instanceName
(n.b。“文件夹名称”中的空格是故意的)我需要一种方法将其分成:
[0]c:/folder name/somewhere/application.exe
[1]instanceName
我打算使用split-path
,但很明显PowerShell v2中有一个错误阻止我这样做:
Split-Path : Cannot find drive. A drive with the name '
所以,我想我是否计算了有多少个空格,然后只需使用-split()
将它分割到最后一个空格。
但是,我看不出如何计算空格的数量。
我发现很多关于使用正则表达式计算复杂字符串的例子,但我只是想计算空格!
答案 0 :(得分:3)
我想象的方法可以做到这一点,但是要使用你的分裂想法,你可以做到以下几点。
$split = "c:/folder name/somewhere/application.exe instanceName".Split(" ")
$path = $split[0..($split.count -2)] -Join " "
$instance = $split[-1]
用空格分开刺痛。空格数由数组$split
中的字符串数表示。我们连接数组中的所有字符串接受最后一个intp $path
然后我们取最后一个条目并将其分配给$instance
您还可以使用.substring
和.lastindexof
$string = "c:/folder name/somewhere/application.exe instanceName"
$index = $string.LastIndexOf(" ")
$string.Substring(0,$index)
$string.Substring($index + 1)
此时我无法直接将其拆分为数组,但输出数组并不是什么大问题。
$path, $instance
或
$array = @($path,$instance)
答案 1 :(得分:1)
您可以使用正则表达式:
$s = "c:/folder name/somewhere/application.exe instanceName"
$s -match '(.*) (.*)$'
$matches[1]
$matches[2]
如果$matches
操作为true,则填充特殊变量-match
。
$matches[0]
包含原始字符串,其他索引将存在于正则表达式中的组数(括号中的模式)。在这种情况下:(.*) (.*)$
我们有两个小组。