使用powershell的正则表达式

时间:2012-10-30 11:33:35

标签: regex powershell

这里是场景,我有下面提到的这些线,我想只提取两个点之间的中间字符。

 "scvmm.new.resources" --> This after an regular expression match should return only "new"
 "sc.new1.rerces" --> This after an regular expression match should return only "new1"

我的基本要求是在两个点之间提取任何东西,前缀和后缀

 (.*).<required code>.(.*)

有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:3)

您可以在不使用正则表达式的情况下执行此操作。将字符串拆分为'。'并抓住中间元素:

PS> "scvmm.new.resources".Split('.')[1]
new

答案 1 :(得分:2)

或者这个

'scvmm.new.resources' -replace '.*\.(.*)\..*', '$1'

答案 2 :(得分:1)

像这样:

 ([regex]::Match("scvmm.new1.resources", '(?<=\.)([^\.]*)(?=\.)' )).value

答案 3 :(得分:0)

对于这样一个简单的子字符串提取,您实际上并不需要正则表达式。像Shay的Split('.')一样可以使用IndexOf()来表示类似的效果,

$s = "scvmm.new.resources"
$l = $s.IndexOf(".")+1
$r = $s.IndexOf(".", $l)
$s.Substring($l, $r-$l) # Prints new

$s = "sc.new1.rerces"
$l = $s.IndexOf(".")+1
$r = $s.IndexOf(".", $l)
$s.Substring($l, $r-$l) # Prints new1

这看起来是第一个出现的点。然后它在第一次击中后查找点的第一次出现。然后它提取两个位置之间的字符。这在分隔字符不相同的场景中很有用(尽管Split()方式在很多情况下也会起作用)。