Ich konnte die Lösung von aix nicht zum Laufen bringen (und sie funktioniert auch nicht mit RegExr), also habe ich mir eine eigene ausgedacht, die ich getestet habe und die genau das zu tun scheint, wonach Sie suchen:
((^[a-z]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($))))
und hier ist ein Beispiel für die Verwendung:
; Regex Breakdown: This will match against each word in Camel and Pascal case strings, while properly handling acrynoms.
; (^[a-z]+) Match against any lower-case letters at the start of the string.
; ([A-Z]{1}[a-z]+) Match against Title case words (one upper case followed by lower case letters).
; ([A-Z]+(?=([A-Z][a-z])|($))) Match against multiple consecutive upper-case letters, leaving the last upper case letter out the match if it is followed by lower case letters, and including it if it's followed by the end of the string.
newString := RegExReplace(oldCamelOrPascalString, "((^[a-z]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($))))", "$1 ")
newString := Trim(newString)
Hier trenne ich jedes Wort durch ein Leerzeichen. Hier sind einige Beispiele, wie die Zeichenfolge transformiert wird:
- ThisIsATitleCASEString => Dies ist eine Titel-CASE-Zeichenfolge
- andThisOneIsCamelCASE => und This One Is Camel CASE
Diese obige Lösung macht das, was der ursprüngliche Beitrag verlangt, aber ich brauchte auch einen regulären Ausdruck, um Kamel- und Pascal-Strings zu finden, die Zahlen enthielten. Deshalb habe ich mir auch diese Variante ausgedacht, um Zahlen einzuschließen:
((^[a-z]+)|([0-9]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($)|([0-9]))))
und ein Beispiel für die Verwendung:
; Regex Breakdown: This will match against each word in Camel and Pascal case strings, while properly handling acrynoms and including numbers.
; (^[a-z]+) Match against any lower-case letters at the start of the command.
; ([0-9]+) Match against one or more consecutive numbers (anywhere in the string, including at the start).
; ([A-Z]{1}[a-z]+) Match against Title case words (one upper case followed by lower case letters).
; ([A-Z]+(?=([A-Z][a-z])|($)|([0-9]))) Match against multiple consecutive upper-case letters, leaving the last upper case letter out the match if it is followed by lower case letters, and including it if it's followed by the end of the string or a number.
newString := RegExReplace(oldCamelOrPascalString, "((^[a-z]+)|([0-9]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($)|([0-9]))))", "$1 ")
newString := Trim(newString)
Und hier sind einige Beispiele, wie eine Zeichenfolge mit Zahlen mit diesem regulären Ausdruck transformiert wird:
- myVariable123 => meine Variable 123
- my2Variables => meine 2 Variablen
- The3rdVariableIsHere => Die 3. rdVariable ist da
- 12345NumsAtTheStartIncludedToo => 12345 Nums am Anfang ebenfalls enthalten
^
und einen anderen bedingten Fall für Großbuchstaben im negativen Lookbehind benötigen würden. Ich bin mir nicht sicher, aber ich denke, das wäre die beste Wahl, um das Problem zu beheben.