gpt4 book ai didi

regex - 如何在Powershell中使用正则表达式拆分首次出现

转载 作者:行者123 更新时间:2023-12-02 23:09:57 24 4
gpt4 key购买 nike

$ 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并使用结果重命名该文件。

最佳答案

即时解决方法是在第一个捕获组中使用非贪婪量词:在.*之后加上?:

[regex]$testreg = "(?<name1>.*?)\s-\s(?<name2>.*)\.(?<ext>\w+$)"

默认情况下,量词是贪婪的,因此 .*中的 (?<name1>.*)\s-将与最后一个 -实例(以空格字符开头)匹配。

另一个选择-假设您的第一个捕获组的目标 token 没有嵌入的空白-是让您的第一个捕获组仅匹配非空白字符:
[regex]$testreg = "(?<name1>[^\s]*)\s-\s(?<name2>.*)\.(?<ext>\w+$)"

关于regex - 如何在Powershell中使用正则表达式拆分首次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44792382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com