首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将lowerCamelCase转换为snake_case的最佳方法

将lowerCamelCase转换为snake_case的最佳方法
EN

Stack Overflow用户
提问于 2021-06-23 18:48:37
回答 6查看 69关注 0票数 0

我遇到了下面提到的场景:

输入:- parselTongue

预期输出:- parsel_tongue

我的代码:-

代码语言:javascript
复制
empty_string = ""
word = input()
if word.islower() == 1:
    empty_string = empty_string + word
    print(empty_string)
else:
    for char in word:
        char = str(char)
        if char.isupper() == 1:
            x = char
            y = word.find(x)
            print(char.replace(char, word[0:y] + "_" + char.lower() + word[y:]))

我的输出:-

parsel_tTongue

当我的输出是"parsel_tTongue“而不是"parsel_tongue”时,请告诉我哪里出错了。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2021-06-23 18:57:37

我相信这种方法可以更好。

它防止单词不仅包含字母,而且还包含特殊字符或数字的情况。

代码语言:javascript
复制
word = "camelCaseWord"
res = "" # sanke case word
# handle 1st upper character
if word[0].isupper():
    word = word[0].lower() + word[1:]
for w in word:
    # Only letter can be upper
    if w.isupper():
        res += "_" + w.lower()
    else:
        res += w
print(res)
>>> camel_case_word

如果word = "camelCase3Wor& -> >>> camel_case3_wor&

票数 2
EN

Stack Overflow用户

发布于 2021-06-23 18:57:06

更优雅的解决方案是使用理解来实现逻辑。

代码语言:javascript
复制
word = input()
output= ''.join(c if not c.isupper() else f'_{c.lower()}' for c in word)

#output: 'parsel_tongue'
票数 3
EN

Stack Overflow用户

发布于 2021-06-23 18:57:14

不需要循环使用正则表达式

代码语言:javascript
复制
import re

name = 'parselTongue'
name = re.sub(r'(?<!^)(?=[A-Z])', '_', name).lower()
print(name)  # camel_case_name
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68098343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档