文件名如下
$inpFiledev = "abc_XYZ.bak"
我只需要变量中的 XYZ 即可与其他文件名进行比较。
我试过下面:
[String]$findev = [regex]::match($inpFiledev ,'_*.').Value
Write-Host $findev
正则表达式中的星号的行为方式与文件系统列表命令中的行为方式不同。按照目前的情况,您的正则表达式正在寻找下划线,重复零次或多次,后跟任何字符(在正则表达式中用句点表示)。因此,正则表达式在字符串的开头找到零个下划线,然后找到“a”,这就是它返回的匹配项。
首先,纠正一下这一点:
'_*.'
变成“下划线,后跟任意数量的字符,后跟文字句点”。 “字面句点”意味着我们需要通过使用来转义正则表达式中的句点\.
,记住那个句点意味着任何字符:
'_.*\.'
返回:
_XYZ.
所以,距离不远了。
如果您希望从字符之间返回某些内容,则需要使用捕获组。将您想要保留的位放在括号中:
'_(.*)\.'
然后您需要使用 PowerShell 正则表达式组来获取值:
[regex]::match($inpFiledev ,'_(.*)\.').Groups[1].Value
返回:XYZ
Groups[1] 中的数字 1 仅表示第一个捕获组,您可以通过使用更多括号向表达式添加任意数量的捕获组,但在本例中只需要一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)