Powershell在引号内捕获文本

时间:2018-03-15 05:52:55

标签: powershell

我有一行保存为$variable1,例如:

file"yourtxthere/i/master.ext" autostart:true, width

我如何使用Powershell中的Regex编写正确的语法来获取引号内的所有内容。正则表达式是在Powershell中执行此操作的最佳方式吗?

2 个答案:

答案 0 :(得分:0)

虽然正则表达式很强大,但这是一个简单的例子。因此,一个简单的解决方案基于字符串对象的split()方法。

$variable1 = 'file"yourtxthere/i/master.ext" autostart:true, width'
# Splitting requires at least one "
if ($variable1.IndexOf('"') -gt 0) {
     $variable1.Split('"')[1]
}

拆分字符串将产生三个元素的数组:

file
yourtxthere/i/master.ext
autostart:true, width

由于Powershell的数组以索引零开头,所需的数据位于索引位置1.如果字符串不包含双引号,则拆分将不起作用。使用语句

检查

if ($variable1.IndexOf('"') -gt 0)

如果没有一个,拆分无报价字符串将只返回一个单元数组并尝试访问索引1将导致错误消息:

$variable1.Split('!')[1]
  

索引超出了数组的范围。

答案 1 :(得分:0)

我不是百分百肯定我理解这个问题,但假设你把它存储在$ variable1中就像这样的字符串:

$variable1 = 'file"yourtxthere/i/master.ext" autostart:true, width'

然后你可以通过使用双引号分割字符串作为分隔符来提取引用的文本,如下所示:

$variable1.Split('"')[1]

将字符串拆分为包含三个部分的数组。第一部分是第一个双引号之前的所有内容,第二部分是第一个和第二个引号之间的所有内容,第三个是第二个引号之后的所有内容。 [1]告诉它输出第二部分。

我认为this picture可能会更好地说明它。

还有其他方法可以解决这个问题,事实上如果你做这样的事情,根本不需要变量:

('file"yourtxthere/i/master.ext" autostart:true, width').split('"')[1]

只要在第一次出现之前从未有任何额外的双引号,那将会正常工作。