찾다
백엔드 개발파이썬 튜토리얼Python에서 단어를 분할하고 이름 지정을 변환하는 방법

分割单词

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

先引入正则表达式包

import re

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

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

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

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

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

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

  • 是尾字符,是大写,倒数第二个字符是小写,在尾字符前分割,比如 '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(&#39;[ _\-/\\\\]+&#39;, name)
    # 按照非数字字母字符进行分割
    name_parts = re.split(&#39;[^0-9a-zA-Z]&#39;, 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(&#39;IDCard&#39;)) # [&#39;ID&#39;, &#39;Card&#39;]
print(to_words(&#39;getJSONObject&#39;)) # [&#39;get&#39;, &#39;JSON&#39;, &#39;Object&#39;]
print(to_words(&#39;aaa@bbb.com&#39;)) # [&#39;aaa&#39;, &#39;bbb&#39;, &#39;com&#39;]
print(to_words(&#39;D://documents/data.txt&#39;)) # [&#39;D&#39;, &#39;documents&#39;, &#39;data&#39;, &#39;txt&#39;]

分割成全小写单词

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 = &#39;-&#39;.join(words)
    return to_kebab_case

转小蛇式命名法

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

  • 字母全小写

  • 下划线连接

def to_snake_case(name):
    words = to_lower_words(name)
    snake_case_name = &#39;_&#39;.join(words)
    return snake_case_name

转大蛇式命名法

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

  • 字母全大写

  • 下划线连接

def to_macro_case(name):
    words = to_upper_words(name)
    snake_case_name = &#39;_&#39;.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 = &#39;&#39;.join(camel_case_words)
    if len(camel_case) <= 1:
        camel_case = camel_case.lower()
    else:
        camel_case = &#39;&#39;.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 = &#39;&#39;.join(pascal_case_words)
    return pascal_case

위 내용은 Python에서 단어를 분할하고 이름 지정을 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는