如何将 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 方法将我的时代转换为人类可读的字符串