Powershell在引号之间获取内容

时间:2014-03-10 12:07:33

标签: powershell

我正在获得这样的输出

Fila 28:
  Nombre del solicitante: "CONTOSO\X000000"

Fila 29:
  Nombre del solicitante: "CONTOSO\E000000"

Fila 30:
  Nombre del solicitante: "CONTOSO\X111111"

我需要过滤除引号内的所有内容

2 个答案:

答案 0 :(得分:3)

使用带-match和-replace

的正则表达式的另一种可能更直观的解决方案
$text = 'Nombre del solicitante: "CONTOSO\X111111"'

$regex = '\s*Nombre del solicitante: "([^"]+)"\s*'
@($text) -match $regex -replace $regex,'$1'

作为一个单行:

@(<command>) -match ''Nombre del solicitante:' -replace '.*"(.+)".*','$1'

在@()中包装命令输出是为了确保你返回一个数组,即使命令只返回一行,这样-match操作符就可以作为过滤器而不是布尔值真/假测试。 / p>

@JNK - 您正在使用数组进行测试(命令输出将产生什么)?

$text = 
(@'
Fila 28:
  Nombre del solicitante: "CONTOSO\X000000"

Fila 29:
  Nombre del solicitante: "CONTOSO\E000000"

Fila 30:
  Nombre del solicitante: "CONTOSO\X111111"
'@).split("`n") 

$regex = '\s*Nombre del solicitante: "([^"]+)"\s*'
@($text) -match $regex -replace $regex,'$1'


CONTOSO\X000000
CONTOSO\E000000
CONTOSO\X111111

编辑 - 只获取帐户名称,不包含域名部分:

$regex = '\s*Nombre del solicitante: ".+?\\([^"]+)"\s*'

答案 1 :(得分:2)

您可以使用正则表达式轻松完成此操作:

$s = 'Nombre del solicitante: "CONTOSO\X111111"'

IF ($s -match '(?<=").*(?=")')
    {$matches}

$Matches将为您提供所检查字符串中每个匹配项的数组。您可以像任何其他哈希表一样迭代它以获取值。