使用下划线将CamelCase字符串转换为大写

时间:2012-08-14 19:43:03

标签: regex

我有一个字符串“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

4 个答案:

答案 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();
}

演示

&#13;
&#13;
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;
&#13;
&#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