PowerShell正则表达式删除特殊字符间内容的求助
解决PowerShell正则替换保留前缀和文件名的问题
正确命令与正则表达式
要实现保留前缀(第一个\之前的内容)和文件名(最后一个\之后的内容),可以使用以下PowerShell命令:
Get-Content -Path .\src.txt | ForEach-Object { $_ -replace '\\.*\\', '' }
正则说明
\\:匹配单个反斜杠(正则中需用双反斜杠转义).*:贪婪匹配任意字符(包括多个反斜杠),确保从第一个\匹配到最后一个\- 整体效果:将第一个
\到最后一个\之间的所有内容(包括这两个反斜杠)替换为空字符串,直接得到9123 file.txt
替代方案(显式捕获组)
如果需要更明确地保留前缀和文件名,可使用捕获组方式:
Get-Content -Path .\src.txt | ForEach-Object { $_ -replace '^(.*?)\\.*\\(.*)$', '$1$2' }
^(.*?):捕获第一个\之前的前缀(非贪婪匹配避免过度捕获)(.*)$:捕获最后一个\之后的文件名$1$2:将匹配结果替换为两个捕获组的内容
原命令的问题分析
- 错误使用
Where-Object:Where-Object用于过滤行,而非转换内容,应改用ForEach-Object处理每一行 - 正则语法错误:原正则
[.*^\].*[(?!.*)$.*]使用了字符类(方括号),仅匹配单个字符而非连续字符串,导致错误删除了文件名中的部分字符(如f、o、l等),最终得到9123 txt
内容的提问来源于stack exchange,提问作者Ramnath Krishnamoorthy
相关产品推荐
相关产品推荐

