Ignoriere vorhandene Leerzeichen beim Konvertieren von CamelCase in Zeichenfolgen mit Leerzeichen

8

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.

    
Ciaran Martin 05.06.2015, 08:33
quelle

3 Antworten

4

Versuchen Sie:

%Vor%

Ein Beispiel für Regex101

Wie wird es in CS verwendet?

%Vor%

result = 'Test Word asdf Dasdf ABC Def'

Wie es funktioniert

In der Beispielzeichenfolge:

%Vor%

[A-Z][a-z]+ entspricht:

  • [0-4] Test
  • [4-8] Word
  • [13-18] Dasdf
  • [22-26] Test
  • [27-34] Testing
  • [45-50] Camel
  • [50-54] Case
  • [68-73] Aasdf
  • [74-76] Aa
  • [76-79] Bbb

[A-Z]+(?=[A-Z][a-z]) entspricht:

  • [19-22] ABC

[a-z]+ entspricht:

  • [9-13] qwer
  • [64-68] asdf

[A-Z]+ entspricht:

  • [79-81] CD
thodic 05.06.2015, 08:55
quelle
1

Hier ist mein Versuch:

%Vor%

Diese Regex kann mit Regex.Replace und (?<!^|\b|\p{Lu})\p{Lu}+(?=\p{Ll}|\b) als Ersetzungszeichenfolge verwendet werden.

%Vor%

Siehe Demo

Regex Erläuterung:

  • Enthält zwei Alternativen, um eine Kette von Großbuchstaben vor oder nach Kleinbuchstaben zu berücksichtigen.
  • (?<!^\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,
  • %code% - die zweite Alternative, die einem einzelnen Großbuchstaben entspricht, dem kein Stringanfang mit optionalen Großbuchstaben direkt nach oder Wortgrenze vorangestellt ist, gefolgt von einem Kleinbuchstaben oder einer Wortgrenze, der kein optionaler Großbuchstabe vorangestellt ist Buchstaben.
Wiktor Stribiżew 05.06.2015 09:18
quelle
0

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.

  • Sie haben auch manchmal alle Arten von Spaß wie folgt: Regex Problem: IsMatch Methode gibt nie zurück
  • Der obige Regex wird sich nicht mit der wunderbaren Welt des Unicode beschäftigen - z. Kyrillisch ( Ссылка ) (nicht, dass Ihre spezielle Problemdomäne das wahrscheinlich benötigt, aber aus Gründen der Vollständigkeit ...)

Ich würde mit einer kleinen, wiederverwendbaren, leicht testbaren Erweiterungsmethode gehen:

%Vor%     
Jon Rea 05.06.2015 10:19
quelle

Tags und Links