0

0

Python怎么实现分割单词和转换命名

WBOY

WBOY

发布时间:2023-05-13 12:31:06

|

2856人浏览过

|

来源于亿速云

转载

分割单词

将一个标识符分割成若干单词存进列表,便于后续命名法的转换

先引入正则表达式包

import re

至于如何分割单词看个人喜好,如以常见分隔符 “ ”、“_”、“-”、“/”、“” 去分割

re.split('[ _-/\\]+', name)

还可以范围再广一点,拿除了数字和字母以外的所有字符去分割

re.split('[^0-9a-zA-Z]', name)

那对于字母内部怎么分割呢?

立即学习Python免费学习笔记(深入)”;

综合考虑驼峰命名法、连续大写的缩写单词等,笔者根据经验一般会采用这种策略,连续比较三个字符,满足以下条件之一就分割:“小|大无”、“有|大小”、“小|大有”

  • 是尾字符,是大写,倒数第二个字符是小写,在尾字符前分割,比如 'getA' 分割成 ['get','A']

  • 是非首位的中间字符,是大写,前后至少有一个是小写,在该字符前分割,比如 'getJSONString' 分割成 ['get','JSON','String']

对于字母和数字结合的标识符,就比较难处理了

因为有的数字可以作为单词开头(比如 '3D'),有的又可以作为结尾(比如 'HTML5'),还有的字母数字交错(比如 'm3u8'),暂未想到通用的分割的好办法,根据个人需求实现就行了

综合以上几者的分割函数如下

def to_words(name):
    words = []                  # 用于存储单词的列表
    word = ''                   # 用于存储正在构建的单词

    if(len(name) <= 1):
        words.append(name)
        return words

    # 按照常见分隔符进行分割
    # name_parts = re.split('[ _-/\\]+', name)
    # 按照非数字字母字符进行分割
    name_parts = re.split('[^0-9a-zA-Z]', name)
    for part in name_parts:
        part_len = len(part)        # 字符串的长度
        word = ''
        # 如果子串为空,继续循环
        if not part:
            continue   
        for index, char in enumerate(part):
            # “小|大无”
            if(index == part_len - 1):
                if(char.isupper() and part[index-1].islower()):
                    if(word): words.append(word)
                    words.append(char)
                    word = ''
                    continue

            # “有|大小”或“小|大有”
            elif(index != 0 and char.isupper()):
                if((part[index-1].islower() and part[index+1].isalpha()) or (part[index-1].isalpha() and part[index+1].islower())):
                    if(word): words.append(word)
                    word = ''
            word += char
        if(len(word) > 0): words.append(word)
    # 去除空单词
    return [word for word in words if word != '']

测试用例如下

print(to_words('IDCard')) # ['ID', 'Card']
print(to_words('getJSONObject')) # ['get', 'JSON', 'Object']
print(to_words('aaa@bbb.com')) # ['aaa', 'bbb', 'com']
print(to_words('D://documents/data.txt')) # ['D', 'documents', 'data', 'txt']

分割成全小写单词

def to_lower_words(name):
    words = to_words(name)
    return [word.lower() for word in words]

分割成全大写单词

def to_upper_words(name):
    words = to_words(name)
    return [word.upper() for word in words]

分割成首大写、其余小写单词

def to_capital_words(name):
    words = to_words(name)
    return [word.capitalize() for word in words]

转中划线命名法

中划线命名法,也叫烤肉串命名法(kebab case),如 'kebab-case'

def to_kebab_case(name):
    words = to_lower_words(name)
    to_kebab_case = '-'.join(words)
    return to_kebab_case

转小蛇式命名法

小蛇式命名法,其实就是小写下划线命名法,也叫蛇式命名法(snake case),如 'snake_case'

  • 字母全小写

  • 下划线连接

def to_snake_case(name):
    words = to_lower_words(name)
    snake_case_name = '_'.join(words)
    return snake_case_name

转大蛇式命名法

大蛇式命名法,其实就是大写下划线命名法,也叫宏命名法(macro case),如 'MACRO_CASE'

  • 字母全大写

  • 下划线连接

def to_macro_case(name):
    words = to_upper_words(name)
    snake_case_name = '_'.join(words)
    return snake_case_name

转小驼峰命名法

小驼峰命名法,也叫驼峰命名法(camel case) ,如 'camelCase'

  • 首单词首字母小写,后每个单词首字母大写

  • 不使用连接符

def to_camel_case(name):
    words = to_words(name)
    camel_case_words = []
    for word in words:
        if len(word) <= 1:
            camel_case_words.append(word.upper())
        else:
            camel_case_words.append(word[0].upper() + word[1:])

    camel_case = ''.join(camel_case_words)
    if len(camel_case) <= 1:
        camel_case = camel_case.lower()
    else:
        camel_case = ''.join(camel_case[0].lower() + camel_case[1:])
    return camel_case

转大驼峰命名法

大驼峰命名法,也叫帕斯卡命名法(pascal case) ,如 'PascalCase'

  • 每个单词首字母大写

  • 不使用连接符

def to_pascal_case(name):
    words = to_words(name)
    pascal_case_words = []
    for word in words:
        if len(word) <= 1:
            pascal_case_words.append(word.upper())
        else:
            pascal_case_words.append(word[0].upper() + word[1:])
    pascal_case = ''.join(pascal_case_words)
    return pascal_case

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

550

2023.10.23

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

471

2024.03.06

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

296

2025.12.30

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

228

2025.12.30

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号