2016-04-07 5 views
0

私は以下の文字列を持っています:どのように私は変数の値で正規表現を分割するのですか?

21>具体的にしてください。それはどういう意味ですか?21>こんにちは、あなたはそこですか?>サイモン?

私に分割する:基本的にスプリッタが>続く数値(ここでは21と623)である

21>Please be specific. What do you mean by that? 
21>Hello are you there 
623>Simon? 

私の実装では、>という文字が見つかったので、数字以外の値が見つかるまで戻ります。

したがって、基本的にsub-stringなどを使用します。しかし、それは醜いですし、私はRegexの実装が優れていると確信していますが、私はそれについて十分に分かりません。

正規表現はここで使用できますか?

+1

「\ d {1,3}>」のようなものでしょうか?あるいは '\ d +>'さえあるでしょうか?最初は1から3桁、 '>'の順になり、2番目の数字は '>'で始まる1桁以上の数字を探します。 – Tim

答えて

5

あなたは先読みしてそれを達成し、あなたの試合は分割したいものを間の長さがゼロの領域があるように、背後に見ることができます。

string s = "21>Please be specific. What do you mean by that?21>Hello are you there623>Simon?"; 
Regex reg = new Regex(@"(?<=\D)(?=\d+>)"); 
var r = reg.Split(s); 
foreach(var i in r) 
    Console.WriteLine(i); 

ウィル出力

>具体的にしてください。それはどういう意味ですか?

21>こんにちは、あなたはそこ

623>サイモンですか?

+0

同じタイミング:-) –

+0

@noobうん、私は私たちの答えがお互いを補完すると思う。 – juharr

+0

▲褒め言葉! –

0

試行:[0-9]+>

説明:>


01に続く

  • [0-9]+少なくとも1桁

  • 一致を\n$0に置き換えて、一致を個々の行に移動することは意味があります。

+1

'\ d +>'は同等ではないでしょうか? – Tim

+1

'Regex.Split'でそれを使うと、それはマッチを取り除くでしょう。私はOPがどのように試合を続けるかを尋ねていると思う。 – juharr

+2

@Tim '\ d'にはユニコードの数字が含まれており、より遅くなります。ペルシア語の数字などを探す必要がない限り、[0-9]を使うほうが良いでしょう。 – Laurel

3

次の正規表現で試してみてください。デモの\nに置き換え(?<=\D)(?=\d+>):それはsomethingnumber>

正規表現の間のゼロ幅にマッチします。

説明:

  • (?<=\D)が、それは数ではないかどうかを確認するために背後に見えます。

  • (?=\d+>)は、それがnumber>かどうかを調べます。

そしてそれらの間のzer0-widthと一致しました。

Regex101 Demo

関連する問題