2016-04-07 12 views
0

Ich habe die folgende Zeichenfolge:Wie teile ich Regex mit Variablenwerten auf?

21> bitte genau sein. Was meinst du damit? 21> Hallo, bist du da623> Simon?

Ich mag es in aufzuspalten:

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

Grundsätzlich ist der Splitter ist der numerische Wert (21 und 623 in diesem Fall) von den > gefolgt.

Meine Implementierung ist, dass ich die > char finden, dann gehe zurück, bis ich einen nicht numerischen Wert finde.

Also im Grunde mit sub-string und dergleichen. Aber es ist hässlich und ich bin mir sicher, dass es eine bessere Regex-Implementierung gibt, aber ich weiß nicht genug darüber.

Kann Regex hier verwendet werden?

+1

Vielleicht etwas wie '\ d {1,3}>'? Oder vielleicht sogar '\ d +>'? Zuerst würde man nach 1 bis 3 Ziffern suchen, gefolgt von '>', und die zweite würde nach einer oder mehreren Ziffern suchen, gefolgt von '>'. – Tim

Antwort

5

Sie können, die vor uns mit Blick erreichen und hinter aussehen, damit Ihr Spiel der Bereich der Länge Null ist zwischen dem, was Sie teilen möchten.

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); 

Will Ausgang

21> Bitte spezifisch. Was meinst du damit?

21> Hallo, bist du da

623> Simon?

+0

Gleiches Timing :-) –

+0

@noob Ja, und ich denke unsere Antworten ergänzen sich. – juharr

+0

▲ Komplimente !! –

0

Versuchen: [0-9]+>

Erläuterung:

  • [0-9]+ Mindestens 1 Ziffer

  • > gefolgt von >


Es kann sinnvoll sein, die Übereinstimmungen durch \n$0 zu ersetzen, wodurch sie in einzelne Zeilen verschoben werden.

+1

Wäre nicht '\ d +>' äquivalent? – Tim

+1

Wenn Sie das mit 'Regex.Split' verwenden, werden die Übereinstimmungen entfernt. Ich denke, das OP fragt, wie man die Spiele hält. – juharr

+2

@Tim '\ d' enthält eine Unicode-Ziffer und wird langsamer. Es ist besser, '[0-9]' zu verwenden, es sei denn, Sie müssen persische Ziffern oder etwas finden. – Laurel

3

Versuchen Sie mit folgenden Regex. Es entspricht der Breite Null zwischen something und number>

Regex:(?<=\D)(?=\d+>) mit \n für Demo ersetzt.

Erläuterung:

  • (?<=\D) sieht hinter um zu sehen, ob es nicht eine Zahl ist.

  • (?=\d+>) schaut voraus, um zu sehen, ob es ein number> ist.

Und die zer0-width zwischen ihnen abgestimmt.

Regex101 Demo

Verwandte Themen