$Var = "Dog.Jumping.png", "Horse.Jumping.gif", "Cat.Jumping.jpg", "Lion.Jumping.tiff", "Shark.Jumping.svg", "Cow.Jumping.psd"
$Var -replace '\.', ' - '
Run Code Online (Sandbox Code Playgroud)
上面好像找到了两个“.” 角色,我只对第一个感兴趣。类似的事情$Var -replace '\.?', ' - '没有道理,我真的被难住了。
任何帮助将不胜感激!
以下内容可能会满足您的需求:
$Var -replace '^(.+?)\.', '$1 - '
Run Code Online (Sandbox Code Playgroud)
另一个类似的选项是:
$Var -replace '^([^\.]+)\.', '$1 - '
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅https://regex101.com/r/1dhUz2/2。
使用 的实例Regex提供了一种更简单的方法,因为其中一个.Replace重载有一个count参数:
$Var | ForEach-Object { $re = [regex] '\.' } {
$re.Replace($_, ' - ', 1)
}
Run Code Online (Sandbox Code Playgroud)
然而,正如Olaf 在他的评论中指出的那样,由于这些似乎是有效的文件名,并且假设您已使用 收集它们,因此您可以对已经排除扩展名的 ETS 属性Get-ChildItem使用文字替换。.BaseName
补充Santiago Squarzon 的有用答案,另一种方法是使用积极的后向断言。这样的断言向以下正则表达式模式添加了一个要求。它前面必须是断言中定义的模式。
$var -replace '(?<=^[^\.]+)\.', ' - '
Run Code Online (Sandbox Code Playgroud)
输出:
Dog - Jumping.png
Horse - Jumping.gif
Cat - Jumping.jpg
Lion - Jumping.tiff
Shark - Jumping.svg
Cow - Jumping.psd
Run Code Online (Sandbox Code Playgroud)
让我们破译子表达式(?<=^[^\.]+):
(?<=开始积极的回顾断言^将以下模式锚定到字符串的开头[^\.]+任何不是点的字符一次或多次 ( +))结束断言断言的优点是断言本身不会参与匹配,因此实际上只会替换点。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |