2017-11-15 5 views
1

Split()メソッドを使用してstringを正規表現に分割しています。分割条件文字を削除せずにRegex split()を実行する

var splitRegex = new Regex(@"[\s|{]"); 

string input = "/Tests/ShowMessage { 'Text': 'foo' }"; 

//second version of the input: 
//string input = "/Tests/ShowMessage{ 'Text': 'foo' }"; 

string[] splittedText = splitRegex.Split(input, 2); 

stringは、入力の単なるサンプルパターンです。 inputの2つの異なる構造があり、一度スペースがある場合は{の前にスペースがありません。ある場合

  • /テスト/ ShowMessage
  • { 'foo' で 'テキスト':}私は、次のような結果を得るために{ブラケットにinputを分割したいですスペースは、文字列がそこに分割され(スペースが削除されます)、私は私の望む結果を得る。しかし、スペースがない場合は、{に文字列を分割するので、{は削除されますが、私は何もしたくありません。分割条件文字を削除せずにRegex.Split()を使用するにはどうすればよいですか?

+4

['@" \ s *(?= {) "'](https://ideone.com/QASSyI)を使用してください。 –

答えて

3

角括弧は文字セットを作成するので、それらの内文字のうちの1つに正確に一致させたい。あなたの望みは、それらを取り除くことによって始まります。

は、だからあなたが *を追加する必要が空白の ランダム数一致させるために、結果はこの1 \s*です。

  • \sは空白
  • *ある

を0個以上を意味しますが、分割条件の文字を削除しないことを、あなたは先読みアサーション(?=...)を使用することができます。

  • (?=...)または(?!...)先読みアサーションです

組み合わせRegexは次のようになります。\s*(?={)

Thisは、あなたが持っているかもしれませんが、すべての異なるRegex部品の本当に良いと詳細なドキュメントですそれを見てください。さらに、簡単にhereRegexをテストすることができます。

0

試合で中括弧を含めないためにあなたが先読みにそれを置くことができる

\s*(?={) 
オープン中括弧の前に位置までの空白の任意の数と一致します

+0

まさに私が探していたもの。しかし、 '[]'は私の正規表現にどのように影響しますか?この特定のケースでは理解できませんでした。 –

+0

これは、そのパイプ文字のおかげで文字列を分割しませんか? –

+0

@ L.Guthardt角括弧は文字セットを作成するためのものです。だから、 '[\ s | {]'は実際にパイプ文字か中括弧の空白にマッチします。 – juharr

0

あなたは「{」で、通常の文字列分割を使用して、スペースをトリミングすることができます

var bits = "/Tests/ShowMessage { 'Text': 'foo' }".Split("{", StringSplitOptions.RemoveEmptyEntries); 
bits[0] = bits[0].TrimEnd(); 
bits[1] = "{" + bits[1]; 

あなたはRegexルートを使用する場合は、正規表現を少し変更した場合、あなたは{戻って追加することができます:

var splitRegex = new Regex(@"\s*{"); 

string input = "/Tests/ShowMessage { 'Text': 'foo' }"; 

//second version of the input: 
//string input = "/Tests/ShowMessage{ 'Text': 'foo' }"; 

string[] splittedText = splitRegex.Split(input, 2); 
splittedText[1] = "{" + splittedText[1]; 

それは「({続くゼロ個以上の空白)発生時の分割」を意味 - その分割操作は、(あなたが欲しい)あなたのスペースを核兵器、そしてあなたの{(したくない)が、あなたあなたが望むものを得ることを意味すると確信して戻ることができます

+0

はい、それを元に戻すか、デフォルトの 'string.split'の方法が可能で、私の結果を生成しますが、それは私が探していたものではありませんでした。そのより複雑な私は示した、ちょうどいくつかの単純なサンプル。 –

関連する問題