1

シナリオは次のとおりです。以下にこれらの行を示します。2 つのドットの間の中間文字のみを抽出したかったのです。

 "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"

私の基本的な要件は、2 つのドットの間にあるものをすべて抽出することでした。

 (.*).<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

これはドットの最初の出現に見えます。次に、最初のヒットの後に最初に出現するドットを探します。次に、2 つの場所の間の文字を抽出します。これは、たとえば、区切り文字が同じでないシナリオで役立ちます (Split()多くの場合、この方法も機能します)。

于 2012-10-30T13:54:48.783 に答える