1

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

 "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

4 回答 4

3

您可以在不使用正则表达式的情况下做到这一点。在'.'上拆分字符串 并抓住中间元素:

PS> "scvmm.new.resources".Split('.')[1]
new
于 2012-10-30T11:42:51.017 回答
2

或这个

'scvmm.new.resources' -replace '.*\.(.*)\..*', '$1'
于 2012-10-30T11:51:50.733 回答
1

像这样:

 ([regex]::Match("scvmm.new1.resources", '(?<=\.)([^\.]*)(?=\.)' )).value
于 2012-10-30T11:45:55.713 回答
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()方式在许多情况下也适用)。

于 2012-10-30T13:54:48.783 回答