2

我的字符串如下所示:

\\.\ROOT\abc\kjasdkj\MyClass:InstanceName.name="sxs-test3"

我想要一个只能在引号中提取名称的正则表达式,所以结果是sxs-test3

另外,我正在使用 Windows Powershell 来执行此操作,这可以在 PowerShell 中完成吗?

谢谢

4

3 回答 3

3

这是另一个不需要正则表达式的选项:

$path.TrimEnd('"').Split('="',[StringSplitOptions]::RemoveEmptyEntries)[-1]
于 2013-08-11T05:55:52.560 回答
3

对于那个字符串,这个正则表达式对我来说似乎最简单:

$string = '\\.\ROOT\abc\kjasdkj\MyClass:InstanceName.name="sxs-test3"'

if ($string  -match '"(.+?)"') {
    $Matches[1]
}

尽可能少地匹配双引号内的所有内容(惰性扩展)。

于 2013-08-11T17:31:36.807 回答
2
if ($subject -cmatch '(?<=")[^"]*(?=")') {
    $result = $matches[0]
} 

这会查找除引号 ( ) 之外的任意数量的字符[^"]*,但前提是它们前面有一个引号 ( (?<=")),后跟一个引号 ( (?="))。

它甚至不尝试处理转义的引号。

于 2013-08-10T22:20:22.783 回答