2017-05-14 2 views
1

Ich habe diese Saite:erste Zeichen Klein und Raum unterstreichen mit regex

Fuel surcharge

, die ich drehen möchte in

fuel_surcharge

regex. Meine passende Regex sieht aus wie dieses

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

und es gibt mir die beiden Spiele die ich brauche.

Dann versuche ich mit diesem ersetzen regex

\L\1_\2

Mit der Logik, die das erste Spiel geändert werden soll, Fall und das zweite Spiel zu senken soll mit _

Aber dem Ergebnis, das ich ersetzt werden ‚m gegeben ist

f_uel_ surcharge

ich, wie ich aussehen Ich kann das zweite Match nicht isolieren. Muss ich die _ im Ersetzenregex einschließen?

Here ist ein Link zu der Regex ich versuchte regex101.com. Im Moment ist die Regex pcre aber ich mag es möglicherweise in Java verwenden.

+2

Wie wäre es nur 's.toLowerCase(). Ersetzen ('', '_')'? Oder wenn das erste Zeichen nur in Kleinbuchstaben geschrieben werden soll: 'sString (0, 1) .toLowercase() + sstring (1) .replace ('', '_')'? –

+0

@ JBNizet Danke. Ich verwende deine Lösung, wenn ich sie in Java implementiere. Jetzt bin ich ein bisschen neugierig geworden, wie man es mit Regex löst. – g3blv

+0

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

Antwort

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

\L\1\2_ 

, wie Sie den Unterstrich nach dem ersten zwei Matches wollten.

Verwandte Themen