这里是场景,我有下面提到的这些线,我想只提取两个点之间的中间字符。
"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>.(.*)
有人可以帮帮我吗?
答案 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()
方式在很多情况下也会起作用)。