给定的字符串没有在python中转换成camelCase?

Posted

技术标签:

【中文标题】给定的字符串没有在python中转换成camelCase?【英文标题】:Given string is not converting into camelCase in python? 【发布时间】:2021-10-05 08:36:39 【问题描述】:

最近我在 python 中创建了一个function,它可以将任何字符串转换为camelCase 格式,但是在这个函数中传递不同类型的字符串时,当我尝试传递"BirdFlight" 时遇到了问题,它没有将其转换为camelCase

注意 - 我使用了python内置的re模块。

import re

def camelCase(string):
    string = re.sub(r'(_|-)+', ' ', string).title().replace(' ', '')
    
    return ''.join([string[0].lower() + string[1:]])

之后,我创建了一个包含 3 种不同类型字符串的 list 来传递函数。

differentTypeOfString = ['bird flight', 'BirdFlight', '-BIRD-FLIGHT-']

for i in differentTypeOfString:
    print(camelCase(i))

忽略变量名,以后我会改的。

输出

#1 birdFlight
#2 birdflight
#3 birdFlight

嗯,我刚才遇到的问题更多????。我增加了列表中的字符串类型:

differentTypeOfString = ['bird flight', 'BirdFlight', '-BIRD-FLIGHT-', 'Bird-Flight', 'bird_flight', '--bird.flight', 'Bird-FLIGHT', 'birdFLIGHT']

现在我得到了这个输出

#1 birdFlight
#2 birdflight
#3 birdFlight
#4 birdFlight
#5 birdFlight
#6 bird.Flight
#7 birdFlight
#8 birdflight

"birdFLIGHT""--bird.flight" 中的“。”也有同样的问题。 (点)没有删除。

【问题讨论】:

【参考方案1】:

这适用于您当前的示例。 re.sub 在任何现有的 序列之间添加一个空格。

import re

def camelCase(string):
    string = re.sub(r'(?:(?<=[a-z])(?=[A-Z]))|[^a-zA-Z]', ' ', string).title().replace(' ', '')
    return ''.join([string[0].lower() + string[1:]])

differentTypeOfString = ['bird flight', 'BirdFlight', '-BIRD-FLIGHT-', 'Bird-Flight', 'bird_flight', '--bird.flight', 'Bird-FLIGHT', 'birdFLIGHT']

for i in differentTypeOfString:
    print(camelCase(i))

输出:

birdFlight
birdFlight
birdFlight
birdFlight
birdFlight
birdFlight
birdFlight
birdFlight

【讨论】:

【参考方案2】:

我还建议re.findall(甚至re.finditer),并制作正则表达式以保证在小写字母和大写字母之间出现分词:

def camelCase(string):
    return "".join(word.title() if i else word.lower()
        for i, word in enumerate(re.finditer(r"[A-Z]*[a-z]+|[A-Z]+", string))
    )

对于以下测试用例,输出为birdFlight

['bird flight', 'BirdFlight', '-BIRD-FLIGHT-', 'Bird-Flight', 
 'bird_flight', '--bird.flight', 'Bird-FLIGHT', 'birdFLIGHT']

【讨论】:

【参考方案3】:

您可以使用findall 来查找'\w+',然后是.title 每个字。然后将第一个字符小写

def camelCase(s):
    titled = ''.join(i.title() for i in re.findall('\w+', i))
    return titled[0].lower() + titled[1:]

然后你的例子

differentTypeOfString = ['bird flight', 'BirdFlight', '-BIRD-FLIGHT-']
for i in differentTypeOfString:
    print(camelCase(i))

输出

birdFlight
birdflight
birdFlight

【讨论】:

现在我增加了我的list,但它不适用于最近添加的元素或字符串类型。 @KunalTanwar 对于'birdFLIGHT',你怎么知道它应该是'birdFlight' 而不是'birdflight'?是不是因为dF之间有小写转大写? 这就是游戏的全部内容!! ?? 我知道,但我希望 python 自己解决这个问题。

以上是关于给定的字符串没有在python中转换成camelCase?的主要内容,如果未能解决你的问题,请参考以下文章

怎样把数据在labvIEW中转换成信号

在数据库查询字符串中转义引号的好方法?

在access数据库中,怎样能在数据表中实现录入小写数写后自动转换成大写人民币,在不同的列中转换成也可以.

杰克逊没有在 JSON 中转义引号

在 Java 中转义 MySQL 字符串...没有准备好的语句

如何在 Hadoop 上运行的 Cloudera Impala 的 python impyla 查询中转义字符