如何使用正则表达式匹配后排除子串,删除路径中的contoso域名
解决方案
直接调整正则表达式的捕获规则即可实现需求,可用代码如下:
$original = 'M:\Shares\Profiles\Server\Profiles\abcd.contoso.V2.01' $modified = $original -replace '.*\\([^\\.]+)\.contoso\.([^\\]+)$', '$1.$2'
运行后$modified的返回值就是预期的abcd.V2.01。
正则逻辑说明
.*\\:匹配路径最后一个反斜杠之前的所有内容,该部分直接丢弃([^\\.]+):第一个捕获组,匹配要保留的用户名前缀abcd,规则为匹配不含反斜杠、点的连续字符\.contoso\.:匹配要剔除的域名段,前后的点加转义符避免误匹配其他字符,该部分直接丢弃([^\\]+):第二个捕获组,匹配域名之后要保留的后缀V2.01- 替换时用
$1.$2拼接两个需要保留的捕获组内容,得到最终结果。
如果需要适配任意中间域名的场景,可使用通用版本:
# 自动剔除中间任意域名段,不限制为contoso $modified = $original -replace '.*\\([^\\.]+)\.[^.]+\.([^\\]+)$', '$1.$2'
内容的提问来源于stack exchange,提问作者Rohit Kachroo
相关产品推荐
相关产品推荐

