Ich möchte camelCase
oder PascalCase
words in eine separate Sammlung von Wörtern teilen.
Bisher habe ich:
%Vor% Es funktioniert gut, um "TestWord" in "Test Word" zu konvertieren und einzelne Wörter unberührt zu lassen, z. Testing
bleibt Testing
.
Allerdings wird ABCTest
in A B C Test
konvertiert, wenn ich ABC Test
bevorzugen würde.
Versuchen Sie:
%Vor% result
= 'Test Word asdf Dasdf ABC Def'
In der Beispielzeichenfolge:
%Vor% [A-Z][a-z]+
entspricht:
Test
Word
Dasdf
Test
Testing
Camel
Case
Aasdf
Aa
Bbb
[A-Z]+(?=[A-Z][a-z])
entspricht:
ABC
[a-z]+
entspricht:
qwer
asdf
[A-Z]+
entspricht:
CD
Hier ist mein Versuch:
%Vor% Diese Regex kann mit Regex.Replace
und
als Ersetzungszeichenfolge verwendet werden. (?<!^|\b|\p{Lu})\p{Lu}+(?=\p{Ll}|\b)
Siehe Demo
Regex Erläuterung:
(?<!^\p{Lu}*|\b)\p{Lu}(?=\p{Ll}|(?<!\p{Lu}*)\b)
- erste Alternative, die mehreren Großbuchstaben entspricht, denen kein Stringanfang, keine Wortgrenze oder ein anderer Großbuchstabe vorangestellt ist, gefolgt von einem Kleinbuchstaben oder einer Wortgrenze, Haben Sie eine Anforderung, Regex zu verwenden? Um ehrlich zu sein, würde ich Regex dafür überhaupt nicht benutzen. Sie sind schwer zu debuggen und nicht besonders lesbar.
Ich würde mit einer kleinen, wiederverwendbaren, leicht testbaren Erweiterungsmethode gehen:
%Vor%