2017-05-14 2 views
1

J'ai cette chaîne:Faire la première minuscule de caractère et de l'espace avec regex souligner

Fuel surcharge

que j'aime se transformer en

fuel_surcharge

utilisant l'expression rationnelle. Mon regex correspondant ressemble à ce

\b([A-Z])|(\s)

et il me donne les deux matches dont j'ai besoin.

Ensuite, j'essaie cette remplacer regex

\L\1_\2

Avec la logique que le premier match devrait être modifié en minuscules et le deuxième match doit être remplacé par _

Mais le résultat que je « m est donné

f_uel_ surcharge

Je regarde comme je Je ne suis pas capable d'isoler le deuxième match. Dois-je joindre le _ dans l'expression regex de remplacement?

Here est un lien vers la regex j'ai essayé sur regex101.com. Pour le moment l'expression régulière est pcre mais potentiellement j'aime l'utiliser dans Java.

+2

Que diriez-vous juste de 's.toLowerCase(). Replace ('', '_')'? Ou, si vous voulez seulement que le premier caractère devienne minuscule: 's.substring (0, 1) .toLowercase() + s.substring (1) .replace ('', '_')'? –

+0

@JBNizet Merci. Je vais utiliser votre solution si je l'implémente en Java. Maintenant, je suis un peu curieux de le résoudre avec juste regex. – g3blv

+0

'' \ b ([A-Z]) ([a-z] *) (\ s) '' '' \ L \ 1 \ 2_ \ 3' –

Répondre

0
\b([A-Z])([a-z]*)(\s) 

\L\1\2_ 

que vous vouliez le trait de soulignement après les premières deux matchs.