给定的字符串未转换为 python 中的驼峰命名法?

Given string is not converting into camelCase in python?

最近我在 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:]])

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

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" 中的“.”存在同样的问题。 (点)没有删除。

您可以使用 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

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

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

我还建议 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']