给定的字符串未转换为 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']
最近我在 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
在任何现有的
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']