$ File是文件名
($List = gci $path | select -expandproperty Name
,然后我将遍历$ List中的每个$ File。)
我想稍后拆分name1并操纵它,但我的代码在name1中给了我name2的一部分。
我正在使用-
(空格短划线空间)作为name1和name2的分隔符,但是,在某些情况下,name2包含额外的-
(空格短划线空间)。
这就是我正在做的事情:
PS D:\> $File="foo - bar - bar2.ext"
[regex]$testreg = "(?<name1>.*)\s-\s(?<name2>.*)\.(?<ext>\w+$)"
$m = $testreg.Match($File)
$m.Groups["name1"].value
$m.Groups["name2"].value
$m.Groups["ext"].value
foo - bar
bar2
ext
我希望它能给我:
foo
bar - bar2
ext
这样我以后可以操作foo并使用结果重命名文件。
答案 0 :(得分:3)
立即解决方法是在第一个捕获组中使用非贪婪量词:跟.*
跟?
:
[regex]$testreg = "(?<name1>.*?)\s-\s(?<name2>.*)\.(?<ext>\w+$)"
默认情况下,量词是贪心,因此.*
中的(?<name1>.*)\s-
将匹配 last -
实例(前面有一个空格字符。)
另一个选择 - 假设您的第一个捕获组的目标令牌没有嵌入的空格 - 是让您的第一个捕获组仅匹配非空白字符:
[regex]$testreg = "(?<name1>[^\s]*)\s-\s(?<name2>.*)\.(?<ext>\w+$)"