广告位联系
返回顶部
分享到

Python分割单词和转换命名法的实现

python 来源:互联网 作者:佚名 发布时间:2024-02-17 20:51:37 人浏览
摘要

分割单词 将一个标识符分割成若干单词存进列表,便于后续命名法的转换 先引入正则表达式包 1 import re 至于如何分割单词看个人喜好,如以常见分隔符 、_、-、/、\ 去分割 1 re.split([ _\-/\\\\

分割单词

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

先引入正则表达式包

1

import re

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

1

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

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

1

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

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

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

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

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

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 != '']

测试用例如下

1

2

3

4

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']

分割成全小写单词

1

2

3

def to_lower_words(name):

    words = to_words(name)

    return [word.lower() for word in words]

分割成全大写单词

1

2

3

def to_upper_words(name):

    words = to_words(name)

    return [word.upper() for word in words]

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

1

2

3

def to_capital_words(name):

    words = to_words(name)

    return [word.capitalize() for word in words]

转中划线命名法

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

  • 字母全小写
  • 连字符连接

1

2

3

4

def to_kebab_case(name):

    words = to_lower_words(name)

    to_kebab_case = '-'.join(words)

    return to_kebab_case

转小蛇式命名法

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

  • 字母全小写
  • 下划线连接

1

2

3

4

def to_snake_case(name):

    words = to_lower_words(name)

    snake_case_name = '_'.join(words)

    return snake_case_name

转大蛇式命名法

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

  • 字母全大写
  • 下划线连接

1

2

3

4

def to_macro_case(name):

    words = to_upper_words(name)

    snake_case_name = '_'.join(words)

    return snake_case_name

转小驼峰命名法

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

  • 首单词首字母小写,后每个单词首字母大写
  • 不使用连接符

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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'

  • 每个单词首字母大写
  • 不使用连接符

1

2

3

4

5

6

7

8

9

10

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 机器学习、深度学习和神经网络之间的区别和联
    在人工智能领域,机器学习、深度学习和神经网络是最常见的技术术语。机器学习神经网络深度学习深度神经网络。机器学习包括了神经网
  • Python分割单词和转换命名法的实现
    分割单词 将一个标识符分割成若干单词存进列表,便于后续命名法的转换 先引入正则表达式包 1 import re 至于如何分割单词看个人喜好,如
  • Python中OS module的使用介绍
    Python的os模块是用于与操作系统进行交互的标准库之一,它提供了许多有用的函数和变量,以便处理文件和目录。下面是一些常见的os模块函
  • 使用Python实现汉诺塔问题介绍

    使用Python实现汉诺塔问题介绍
    汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在
  • 自然语言处理NLP TextRNN实现情感分类
    概要 在自然语言处理(NLP)领域,情感分析及分类是一项十分热门的任务。它的目标是从文本中提取出情感信息和意义,通常分为两类:正
  • Python中selenium获取token的方法

    Python中selenium获取token的方法
    在不用(或不知道接口)接口获取token的情况下,通过selenium登录获取到token ------该token值会作为后续调用接口的凭证 ps:token、cookie 都可以是接
  • Python实现拉格朗日插值法的介绍
    概述拉格朗日插值法 什么是插值法 插值法是一种数学方法,用于在已知数据点(离散数据)之间插入数据,以生成连续的函数曲线。 插值
  • python使用json.dumps输出中文问题

    python使用json.dumps输出中文问题
    使用json.dumps输出中文 在使用json.dumps时要注意一个问题 1 2 3 import json print(json.dumps(中国)) \u4e2d\u56fd 输出的会是 中国 中的ascii字符码,而不是
  • python去除字符串中的空格、特殊字符和指定字符

    python去除字符串中的空格、特殊字符和指定字符
    去除字符串中的空格、特殊字符、指定字符等,在python中,为我们提供了三种方法: strip()删除字符串前后(左右两侧)的空格或特殊字符
  • Python中文词频统计介绍

    Python中文词频统计介绍
    词频统计是指在文本中计算每个词出现的次数。 在 Python 中,可以使用一些第三方库(如 jieba)来分词,然后使用字典等数据结构记录每个
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计