如何将 Camel Case 解析为人类可读的字符串?

Posted

技术标签:

【中文标题】如何将 Camel Case 解析为人类可读的字符串?【英文标题】:How to parse Camel Case to human readable string? 【发布时间】:2011-09-09 09:24:42 【问题描述】:

是否可以将驼峰式字符串解析为更易读的内容。

例如:

本地企业 = 本地企业 CivicStructureBuilding = 市政结构建筑 getUserMobilePhoneNumber = 获取用户手机号码 bandGuitar1 = 乐队吉他 1

更新

使用simshaun 正则表达式示例,我设法使用此规则将数字与文本分开:

function parseCamelCase($str)

    return preg_replace('/(?!^)[A-Z]2,(?=[A-Z][a-z])|[A-Z][a-z]|[0-9]1,/', ' $0', $str);


//string(65) "customer ID With Some Other JET Words With Number 23rd Text After"
echo parseCamelCase('customerIDWithSomeOtherJETWordsWithNumber23rdTextAfter');

【问题讨论】:

【参考方案1】:

php手册中str_split的用户cmets中有一些例子。

来自Kevin:

<?php
$test = 'CustomerIDWithSomeOtherJETWords';

preg_replace('/(?!^)[A-Z]2,(?=[A-Z][a-z])|[A-Z][a-z]/', ' $0', $test);

这是我为满足您的帖子要求而写的一些内容:

<?php
$tests = array(
    'LocalBusiness' => 'Local Business',
    'CivicStructureBuilding' => 'Civic Structure Building',
    'getUserMobilePhoneNumber' => 'Get User Mobile Phone Number',
    'bandGuitar1' => 'Band Guitar 1',
    'band2Guitar123' => 'Band 2 Guitar 123',
);

foreach ($tests AS $input => $expected) 
    $output = preg_replace(array('/(?<=[^A-Z])([A-Z])/', '/(?<=[^0-9])([0-9])/'), ' $0', $input);
    $output = ucwords($output);
    echo $output .' : '. ($output == $expected ? 'PASSED' : 'FAILED') .'<br>';

【讨论】:

@dynamic ...有什么建议吗? 我认为您需要将 preg_replace 的输出包装为 trim 以删除它在字符串前面的空格。 @simshaun。如果首字母缩略词在字符串内部,则测试通过,但当字符串以首字母缩略词开头或结尾时测试失败。谢谢 您的代码中的错误:CustomerIDWithSomeOtherJETWords => Customer IDWith Some Other JETWords【参考方案2】:

使用正则表达式。在java中是这样的

String[] r = s.split("(?=\\pLu)");

为您提供大部分信息,但不适用于 getUserMobilePhoneNumber = 获取用户手机号码

【讨论】:

在结果上使用ucwords() 会让你越过终点线吗? 为什么这个答案被否决了?当然这不是一个完整的解决方案,但它是一个更聪明的方法的例子,它也将支持其他字母。 mb_convert_case(preg_replace('~(\pLl)(\pLu)~u','$1 $2', 'someCamelCaseText'), MB_CASE_TITLE, "UTF-8"); 应该适用于拉丁文、西里尔文、希腊文或任何其他具有字母大小写概念的字母,与 CamelCase 方法兼容。

以上是关于如何将 Camel Case 解析为人类可读的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何停止 Pandas Dataframe read_json 方法将我的时代转换为人类可读的字符串

将骆驼大小写转换为人类可读的字符串?

如何将纳秒的纪元时间转换为人类可读的?

如何使用 sed 将纪元转换为人类可读的日期时间

如何在 Java 中将 CamelCase 转换为人类可读的名称?

将纪元转换为人类可读的日期在 python 中不起作用