2016-05-27 5 views
-1

Im Folgenden sind einige Eingabe Beispiele sind:Wie zwei klebten Worte mit regex zu spalten, ein GROSSBUCHSTABEN und die andere beginnt mit einem Großbuchstaben

  • UIHint ==> UI + Hint

  • RSSReader ==> RSS Reader +

  • IPAddress ==> IP + Adresse

I ma de so etwas wie dieses

([AZ] +) (([AZ]) ([az] +))

static void Main(string[] args) 
    { 
     string input = "IPAddress"; 
     var result = Regex.Matches(input, "([A-Z]+)(([A-Z])([a-z]+))"); 
     foreach (Match match in result) 
     { 
      foreach (var item in match.Groups) 
      { 
       Console.WriteLine(item); 
      } 
     } 
    } 

und dies ist die Ausgabe:

IPAddress 
IP 
Address 
A 
ddress 

Aber durch den Einsatz Match Groups enthalten auch "A" und "dress" für "IPAddress", zum Beispiel, dass ich sie nicht will.

Ich möchte nur die Haupteingabe (IPAddress), "Adresse" und "IP" in der Match-Gruppe.

Also, wie soll ich das Regex-Muster ändern?

+0

Umgebung? Sprache? – ClasG

+0

Ist es notwendig? Sie können C# als Sprache annehmen. @ClasG –

+0

@RezaAhmadi: Ihr [Regex funktioniert] (https://regex101.com/r/oU4cI0/1). 'IPAddress' sollte übereinstimmen. Warum sollte es nicht? –

Antwort

2

Wie wäre es

([A-Z]+)([A-Z]\w*) 

Check it out here at regex101.

Es gibt Ihnen die zwei Teile in zwei Sammelgruppen.

Bearbeiten: Feste fehlerhafte Übereinstimmung von Adress.

+1

Noch einmal, OP [Regex funktioniert gut] (https://regex101.com/r/wH4oL1/2). –

+0

Ich will nicht $ 3 oder $ 4 Substitution @ WiktorStribiżew –

+0

@RezaAhmadi: Keine Ahnung, was Sie sagen wollen. Wenn Sie die zusätzlichen Erfassungsgruppen nicht benötigen, warum sollten Sie sie überhaupt vorstellen? Wie gesagt, dein erster Regex funktioniert. ** Außer ** möchten Sie auch Wörter in allen Sprachen zuordnen. Der aktuelle passt nur ASCII-Buchstaben. –

Verwandte Themen