2017-01-12 3 views
0

私はPowerShellを使用したXMLに文字列を解析しています:単語が大文字である場合にのみ ''で ''を置換する方法?

NODEのIP 0.0.0.0 "APXPRD"

そして、私は持ってする必要があります。

<NODE_IP>0.0.0.0 "APXPRD"</NODE_IP>

私はregexpを使用しようとしますが、 ''を '_'に置き換える方法はキャッチしません。手紙、助言?

私はその正規表現のように試してみてください:

$textis = 'NODE IP 0.0.0.0 "APXPRD"' 
$textnew = $textis.replace('/^\s*[A-Z]+(?:\s+[A-Z]+)/m', '_') 

が、それが動作しないようです:/

+2

詳細を入力してください。この特定のケースの正規表現を修正するよりも、おそらく全体的な問題に対するより良い解決策があります。 –

答えて

1

あなたが検索できます。

((?:^|\s)[A-Z]+)\s([A-Z]+(?:\s|$)) 

し、それを置き換える:

$1_$2 

これは、st空白の直後(\s)または文字列の先頭(^)にある大文字の文字()で囲みます。その間に空白が必要で、最後に空白(\s)または文字列の末尾($)と一致します。あなたはそれを置き換えるためにPowerShellを使用している場合


は、あなたはこのようにそれを行う必要があります(これについて世話をする:大文字と小文字を区別マッチングのコマンドだけではなく、replacecreplaceです):

$textis = 'NODE IP 0.0.0.0 TEST String "APXPRD"' 
$textnew = $textis -creplace '((?:^|\s)[A-Z]+)\s([A-Z]+(?:\s|$))','$1_$2' 
+0

いいえ、置き換えないでください –

+0

どういう意味ですか? –

+0

$ textnew = $ textis.replace( '[AZ] +)\ s([AZ] +'、 '$ 1_ $ 2')は機能しません:/ –

1
(?<=[A-Z]) (?=[A-Z]) 

大文字の間にスペースを入れます。

途中のスペースに注意してください。見た目と先読みを使用しています

+0

$ textnew = $ textis.replace( '?<= [A-Z])(?= [A-Z]'、 '_')は動作しません - おそらくregexをreplaceに使用する正しい方法はありませんか? –

+0

@GorodeckijDimitrijあなたは、開始を逃すと、あなたのコードスニペットにブラケットを終了しています。 –

+0

括弧は重要です –

関連する問題