2012-03-12 109 views
15

如何使用single将 Java/Perl正则表达式的搜索和替换转换为带有下划线的名称,如下所示的骆驼案例名称?如何使用正则表达式将下划线转换为骆驼大小写?

underscore_variable_name -> underscoreVariableName 
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName 
_LEADING_UNDERSCORE -> leadingUnderscore 

我之所以问一个正则表达式是我想做到这一点使用Eclipse或记事本+ +搜索和替换。

回答

20

Some Perl examples

my $str = 'variable_name, VARIABLE_NAME, _var_x_short, __variable__name___'; 

### solution 1 
$_ = $str; 

$_ = lc; 
s/_(\w)/\U$1/g; 

say; 

### solution 2: multi/leading underscore fix 
$_ = $str; 

$_ = lc; 
s/(?<=[^\W_])_+([^\W_])|_+/\U$1/g; 

say; 

### solution 3: without prior lc 
$_ = $str; 

s/(?<=[^\W_])_+([^\W_])|([^\W_]+)|_+/\U$1\L$2/g; 

say; 

输出:

variableName, variableName, VarXShort, _variable_name__ 
variableName, variableName, varXShort, variableName 
variableName, variableName, varXShort, variableName 
+0

+1:整洁。关于唯一可能的诡计是'_tea_break'会变成'TeaBreak'而不是'teaBreak'或'_teaBreak'。但是,这将有助于使用以下划线开头的名字。 – 2012-03-12 15:38:43

+0

@JonathanLeffler,你说得对,如果使用了多个连续的下划线,那么也会出现问题。更新了解决该问题的答案。 – Qtax 2012-03-12 15:49:01

+1

谢谢,但因为这是用于编辑器搜索和替换对话框,我要求使用一个正则表达式来完成此操作。 '$ _ = lc'打破了这个限制。你能想出一种方法来结合它们吗? – 2012-03-12 15:50:12

2

如果你已经在字符串中驼峰变量,然后@ Qtax的答案会让他们小写。如果你所有的变量都是小写under_scored那么你可以进行以下修改#3:W - 以下_->A-Z

's/(?<=[^\A-Z_])_+([^\A-Z_])|([^\A-Z_]+)|_+/\U$1\L$2/g' 
1

字母转换为大写:

s/[_-]([a-z])/\u$1/gr 
相关问题