2016-05-24 7 views
1

Ich habe die folgende Zeile:Spiel Ausdrücke durch Leerzeichen getrennt

1 2/5 0.4 1+3i 

Jede Gruppe durch ein oder mehrere Leerzeichen getrennt werden können. Der erste, kann Räume haben oder nicht vor ihm. Der letzte kann Leerzeichen haben oder nicht nach ihm.

Ich möchte bekommen:

1 
2/5 
0.4 
1+3i 

Wie kann ich sie mit regex bekommen? Um einfach zu sein, die ich auf einem kürzeren Beispiel versucht, weil komplexe desto schwieriger ist:

2 3i 

ich mit der folgenden regex versucht:

/\s*((?:[\d]+)|(?:[\d]*\i))/g 

Aber ich bekomme die i von seiner ganzen Zahl getrennt:

2 
3 
i 

Ich kann keine gute Regex für mein Problem finden. Irgendeine Lösungsmöglichkeit?

+0

** [diese] (https://regex101.com/r/dH1dZ4/2) ** – rock321987

+1

Duplizieren: - http://stackoverflow.com/questions/225337/how-do-i- split-a-string-with-any-Leerzeichen-Zeichen-als-Trennzeichen – rock321987

+1

Ich benutze C++. Ich suche nicht nur nach Trennstrichen, die von Leerzeichen umgeben sind. Ich suche nur ganze Zahlen, Bruchzahlen und komplexe Zahlen, die durch Leerzeichen getrennt sind. Also nicht alles –

Antwort

2

können Sie match anstelle von Split wie

((?:\d+(?:\.\d+)?)\/(?:\d+(?:\.\d+)?))|((?:[+-]?\d+(?:\.\d+)?)?[+-]?(?:\d+(?:\.\d+)?)?i)|([+-]?\d+(?:\.\d+)?) 

Regex Pannen

((?:\d+(?:\.\d+)?)\/(?:\d+(?:\.\d+)?)) #For fractional part 
    | 
((?:[+-]?\d+(?:\.\d+)?)?[+-]?(?:\d+(?:\.\d+)?)?i) #For complex number 
    | 
([+-]?\d+(?:\.\d+)?) #For any numbers 

weitere Aufschlüsselung

(
    (?:\d+(?:\.\d+)?) #Match any number with or without decimal 
    \/ #Match/literally 
    (?:\d+(?:\.\d+)?) #Match any number with or without decimal 
) #For fractional part 

| #Alternation(OR) 

(
    (?:[+-]?\d+(?:\.\d+)?) #Match real part of the number 
    ? #This makes real part optional 
    [+-]? #Match + or - and make it optional for cases like \di 
    (?:\d+(?:\.\d+)?)? #Match the digits of imaginary part (optional if we want to match only i) 
    i #Match i 
) #For complex number 

| #Alternation(OR) 

([+-]?\d+(?:\.\d+)?) #Match any numbers with or without decimal 

Regex Demo

+0

Wow, wirklich nette Antwort! Danke vielmals! Eine letzte Sache: Wie ist es möglich, Bruchteil im Real- und Imaginärteil eines Komplexes zu entsprechen? –

+0

@SylvainM nur darauf achten, nicht den letzten Ausdruck der Alternation '([+ -]? \ D + (?: \. \ D +)?)' Zu Beginn oder Mitte..anderenfalls wird es falsch sein .. – rock321987

+0

@SylvainM Kannst du ein Beispiel geben? – rock321987