我有一个字符串“CamelCase”,我使用这个RegEx:
string pattern = "(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])";
string[] substrings = Regex.Split("CamelCase", pattern);
在substring
中,我找到了Camel和Case,但我希望uppercase
中的所有人都喜欢这个CAMEL和CASE。更好的是,我希望得到一个类似于CAMEL_CASE的字符串,但要使用正则表达式 ALL 。
答案 0 :(得分:3)
在Perl中你可以这样做:
$string = "CamelCase";
$string =~ s/((?<=[a-z])[A-Z][a-z]+)/_\U$1/g;
$string =~ s/(\b[A-Z][a-z]+)/\U$1/g;
print "$string\n";
替换使用\U
将找到的组转换为大写。
可以使用Perl的e
选项将其压缩为单个正则表达式来评估替换:
$string = "CamelCase";
$string =~ s/(?:\b|(?<=([a-z])))([A-Z][a-z]+)/(defined($1) ? "_" : "") . uc($2)/eg;
print "$string\n";
答案 1 :(得分:3)
这是一个JavaScript实现。
function camelCaseToUpperCase(str) {
return str.replace(/([a-z])([A-Z])/, '$1_$2').toUpperCase();
}
printList([ 'CamelCase', 'camelCase' ],
function(value, idx, values) {
return value + ' -> '
+ camelCaseToUpperCase(value) + ' -> '
+ camelToTitle(value, '_');
}
);
// Case Conversion Functions
function camelCaseToUpperCase(str) {
return str.replace(/([a-z])([A-Z])/, '$1_$2').toUpperCase();
}
function camelToTitle(str, delimiter) {
return str.replace(/([A-Z][a-z]+)/g, ' $1') // Words beginning with UC
.replace(/([A-Z][A-Z]+)/g, ' $1') // "Words" of only UC
.replace(/([^A-Za-z ]+)/g, ' $1') // "Words" of non-letters
.trim() // Remove any leading/trailing spaces
.replace(/[ ]/g, delimiter || ' '); // Replace all spaces with the delim
}
// Utility Functions
function printList(items, conversionFn) {
var str = '<ul>';
[].forEach.call(items, function(item, index) {
str += '<li>' + conversionFn(item, index, items) + '</li>';
});
print(str + '</ul>');
}
function print() {
write.apply(undefined, arguments);
}
function println() {
write.apply(undefined, [].splice.call(arguments,0).concat('<br />'));
}
function write() {
document.getElementById('output').innerHTML += arguments.length > 1 ?
[].join.call(arguments, ' ') : arguments[0]
}
&#13;
#output {
font-family: monospace;
}
&#13;
<h1>Case Conversion Demo</h1>
<div id="output"></div>
&#13;
答案 2 :(得分:2)
使用sed和tr unix实用程序(来自终端)......
echo "CamelCase" | sed -e 's/\([A-Z]\)/-\1/g' -e 's/^-//' | tr '-' '_' | tr '[:lower:]' '[:upper:]'
如果您的骆驼案例字符串带有&#34; ID&#34;在最后,你想保持这种方式,然后使用这个......
echo "CamelCaseID" | sed -e 's/\([A-Z]\)/-\1/g' -e 's/^-//' | tr '-' '_' | tr '[:lower:]' '[:upper:]' | sed -e 's/I_D$/ID/g'
通过扩展ruby中的String类...
class String
def camelcase_to_underscore
self.gsub(/::/, '/').
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
gsub(/([a-z\d])([A-Z])/,'\1_\2').
tr("-", "_").
upcase
end
end
现在,您可以对任何字符串执行camelcase_to_underscore方法。例如:
>> "CamelCase".camelcase_to_underscore
=> "CAMEL_CASE"
答案 3 :(得分:0)
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = "CamelCase";
string output = Regex.Replace(input,
@"(?:\b|(?<=([A-Za-z])))([A-Z][a-z]*)",
m => string.Format(@"{0}{1}",
(m.Groups[1].Value.Length > 0)? "_" : "", m.Groups[2].Value.ToUpper()));
Console.WriteLine(output);
}
}
测试此代码here。