2012-12-23 55 views
0

我必须从该行提取用户信息获取子PowerShell中,使用正则表达式和特殊字符

"user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 

的模式是,信息总是"user/data ^“和"^”之间

预期结果是 “MS \约翰”

这是我的尝试,

$line = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 
if ($line -match "user/data(.*)") 
{ 
    write-host "found: $($matches[1])" 
} else { 
    Write-Host "no found" 
} 

我不知道如何在正则表达式中添加特殊字符并提取“ms \ john”。

欢迎任何评论。

回答

1

两个更多的选择:

PS> $il = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 

PS> $il -replace '^user/data\ \^`([^\^]+)\ \^.+$','$1' 
ms\john 

PS> [regex]::Matches($il,'user/data\s\^`([^\^]+)\s\^').Groups[1].Value 
ms\john 
+0

它工作正常,但如果我尝试从文本文件中读取相同的行,我会得到“ms \ john”。注意狂野口音或倒影。 +1 – m0dest0

+0

你说得对,我已经更新了模式,给它一个镜头。 –

+0

它的工作,谢谢Shay.Can你请解释为什么前一个没有工作。 – m0dest0

1

试试这个:

$line = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 
if ($line -match "(?<=\^)(.[^\^]*)") 
{ 
    write-host "found: $($matches[1])" 
} else { 
    Write-Host "no found" 
} 
+0

+1,由于基督教。正如我声明的那样,正则表达式工作正常,但是如果我尝试从文本文件中读取同一行,则会在捕获的字符串的开始处添加狂野口音,就像文本文件正在添加一个额外字符一样。 – m0dest0

2

你也可以试试这个:

$line = "user/data ^`ms\john ^`Lorem Ipsum Lorem ^`Lorem Ipsum Lorem" 
if ($line -match "user/data\s+\^`?([^\^]+)") 
{ 
    write-host "found: $($matches[1])" 
} else { 
    Write-Host "no found" 
} 
+0

+ 1,正则表达式工作正常,但如果我尝试从文本行读取行,然后添加反引号,任何线索?谢谢, – m0dest0