2017-08-29 13 views
1

私はいくつかのRegExを動作させようとしていますが、私の特定の使用例では少し失敗します。Regex - 複数の一致、コロン、空白

Device-1: P0_Node0_Channel0_Dimm0 
size: 32 GB 
speed: 2133 MHz 
type: DDR4 

だから私は少しの周りにしようと、いくつかの表現に

(.*?):\s 
をテストした:

は、私は、好ましくは、そのように、この文字列から情報を抽出したいの例

Device-1: P0_Node0_Channel0_Dimm0 size: 32 GB speed: 2133 MHz type: DDR4 

ための次の文字列を考えます

いくつかの点ではうまくいきます。最初のパラメータ名を適切にキャッチしますが、それ以降はスペースを使いません。

:\s(.*?)\s\w*?:!? 

これは、3番目のパラメータ値の空き領域をキャッチしますが、1番目と3番目の値のみを返します。また、パラメータ名もありません。

予想される動作をどのように達成できるか考えている人がいますか?

注:Excel VBAでこれを実行していますが、すべての機能がサポートされているかどうかはわかりません。

おかげ

答えて

1

あなたはregex demo

詳細

  • ([^\s:]+)を参照してください

    ([^\s:]+):\s*(.*?)\s*(?=[^\s:]+:|$) 
    

    を使用することができます - グループ1:1またはそれ以上の空白文字以外の文字と:

  • : - コロン
  • \s* - ゼロ個以上の空白
  • (.*?) - グループ2:任意の0+
    • \s* ...が最初に出現するまでの改行文字以外の文字 - ゼロ続いている以上の空白...
    • (?=[^\s:]+:|$) - 空白や:または文字列の末尾以外の1つ以上の文字
+0

アメージング、ありがとうございました! 2回目のグループマッチの終了時にスペースを削除する答えを編集しました。 回答が受け入れられました。 そして、6文字制限のために "may"を "use"で編集しなければなりませんでした。 – CuttingWide

+0

@CuttingWide:申し訳ありませんが、あなたは '([^ \ s:] +):\ s *(?*?)\ s *(?= [^ \ s:] +:| $)私は答えを編集しました。 –

0

これはAutoItの例である:

#include <Array.au3> 
Local $str = 'Device-1: P0_Node0_Channel0_Dimm0 size: 32 GB speed: 2133 MHz type: DDR4' 
$r_A = StringRegExp($str, '([\w-]*\:)\s*(\w*\s|.*)', 3) 
ConsoleWrite(_ArrayToString($r_A, @CR) & @crlf) 
関連する問題