2017-03-24 15 views
0

次の正規表現はPythonでうまく動作します(先読みアサーションのため)。Python先読みアサーション正規表現を有効なGolangに変換する

some_list = re.findall('^(?=Name:)(.*?)(?=USB\ Device\ Filters:)', myinput, re.MULTILINE|re.DOTALL)

以下のコードブロックにmyinputの例を参照してください。

名:は常にグループの最初とのUSBデバイスフィルタになります:は常にグループの終わりになるでしょう。すべての行が有効なキーを持っているわけではありません。たとえば、値は空白行を持つことができます。

Name:   Server1 10.0.0.11 
Groups:  /
Guest OS:  Ubuntu (64-bit) 
\n 
<none> 
USB Device Filters: 

Name:   Server2 10.0.0.12 
Groups:  /
Guest OS:  Debian (64-bit) 
\n 
<none> 
USB Device Filters: 

誰も私が有効Golang正規表現にこれを変えるのを助けることはできますか?

最終的な目標は、myinputを解析し、一致するグループのスライスを取得することです。 Pythonでこれを考える

答えて

1

^(?=Name:)ので

^(?=Name:)(.*?)(?=USB Device Filters:) 

Demo

はゼロ幅アサーション、Name:がそれに続く捕捉基によって捕捉されます。

あなたはこれとGolangで同じことをキャプチャすることができます:あなたはName:\sをキャプチャしたくない場合は

^(Name:.*?)USB Device Filters: 

Demo

はあなたが行うことができます:

^Name:\s*(.*?)USB Device Filters: 

Demo

あなたはエスケープする必要はありませんeのいずれかの言語で(?=USB\ Device\ Filters:)のスペース。すべて(?ms)フラグが設定されています。

+0

ありがとう@dawg。これは正しい軌道に乗った。私は最後の夜を空白にして、旗を忘れていたに違いない。これは最後に私のために働いた... '' 'regexp.MustCompile(' '?ms)^(名前:。*?)USBデバイスフィルタ:' '' ' – mfridman

関連する問題