Я не зміг змусити рішення aix працювати (і воно також не працює на RegExr), тому я придумав своє власне, яке я протестував і, схоже, робить саме те, що ви шукаєте:
((^[a-z]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($))))
і ось приклад його використання:
; 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)
Тут я розділяю кожне слово пробілом, тому ось кілька прикладів того, як рядок трансформується:
- ThisIsATitleCASEString => Це рядок CASE заголовка
- andThisOneIsCamelCASE => і це КАМЕР КЕЙЛ
Це рішення вище робить те, про що вимагає оригінальний пост, але мені також потрібен регулярний вираз, щоб знайти рядки верблюда та паскаля, які включали числа, тому я також придумав цей варіант, щоб включити цифри:
((^[a-z]+)|([0-9]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($)|([0-9]))))
і приклад його використання:
; 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)
І ось кілька прикладів того, як рядок із числами трансформується за допомогою цього регулярного виразу:
- myVariable123 => моя змінна 123
- my2Variables => мої 2 змінні
- The3rdVariableIsHere => Третя змінна вже тут
- 12345NumsAtTheStartIncludedToo => 12345 Номери на початку також включені
^
та ще один умовний регістр великих літер із негативним вигляду позаду. Не тестував напевно, але я думаю, що це був би ваш найкращий вибір для вирішення проблеми.