做第一个字符小写和空间正则表达式

问题描述:

强调我有这个字符串:做第一个字符小写和空间正则表达式

Fuel surcharge

,我喜欢使用正则表达式变成

fuel_surcharge

。我的正则表达式匹配看起来像这样

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

,这让我的两场比赛,我需要。

然后我与此尝试替换正则表达式

\L\1_\2

与第一匹配应该改变为小写和第二匹配应与_

但结果我被替换的逻辑“M给出的是

f_uel_ surcharge

我看起来像我无法隔离第二场比赛。我需要在替换正则表达式中包含_吗?

Here是我在regex101.com上试过的正则表达式的链接。目前正则表达式为pcre,但可能我喜欢在Java中使用它。

+2

如何只's.toLowerCase()代替(””, '_')'?或者,如果您只想让第一个字符变成小写:'s.substring(0,1).toLowercase()+ s.substring(1).replace('','_')'? –

+0

@JBNizet谢谢。如果我在Java中实现它,我会使用你的解决方案。现在我有点好奇如何用正则表达式来解决它。 – g3blv

+0

'\ B([A-Z])([A-Z] *)(\ S)''到\大号\ 1 \ 2_ \ 3' –

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

\L\1\2_ 

当您在第比赛后想下划线。